🍿 闭包及其应用

闭包形成的原理:作用域链,当前作用域可以访问上级作用域中的变量

闭包解决的问题:能够让函数作用域中的变量在函数执行结束之后不被销毁,同时也能在函数外部可以访问函数内部的局部变量。

闭包带来的问题:由于垃圾回收器不会将闭包中变量销毁,于是就造成了内存泄露,内存泄露积累多了就容易导致内存溢出。

闭包的应用:能够模仿块级作用域,能够实现柯里化,在构造函数中定义特权方法、Vue中数据响应式Observer中使用闭包等。 ...


块级作用域‌是指在JavaScript中,由一对花括号{}包裹的代码区域,例如循环体、条件语句体等。在块级作用域内声明的变量,其作用范围仅限于该块内部,外部无法访问这些变量‌12。ES6引入了letconst关键字,使得JavaScript支持块级作用域,这有助于减少全局变量的使用,提高代码的模块化和可维护性‌12。

柯里化‌是一种将使用多个参数的函数转换成一系列使用一个参数的函数的技术。通过柯里化,可以将一个多参数的函数转换成一系列单参数的函数,每个函数返回下一个待调用的函数,直到最后一步调用时才执行原函数。柯里化常用于减少参数错误和提高代码的可读性和重用性‌.

柯里化是一个预处理思想,使用闭包形成一个不被释放的上下文,把一些信息存储起来,以后基于作用域链,访问到事先存储的信息,然后进行先关处理,我们把这种模式称为柯里化函数。

//预处理变量n,子作用域能够访问到该变量    
function fn(n=10){      
return function(...args){    
    return args.reduce((value,item) => value+item,n);     
    }    
}
let sum=fn();
console.log(sum(1,2,3));