关于闭包的一些思考
今天大胖问我什么是"闭包'',我没有回答上来
之前对闭包的理解一直停留在私有变量,闭了“内部”的环境的阶段
直到看到了轮子哥的这句话:
闭包不是私有,闭的意思不是“封闭内部状态”,而是“封闭外部状态”,当外部状态的scope失效的时候,还有一份留在内部状态里面
茅塞顿开!!!
然后自己试着做了一下简单的例子
// 定义了一个相加函数
function basicAdd(x) {
console.log('At inner function num is: ', x);
return function(y) {return x + y;};
}
let num = 8;
// 将num作为参数传进去,add8的功能变被定为了add 8的操作;
// 保留了num = 8时的状态
const add8 = basicAdd(num);
num ++;
// 将num再次传入,add9的功能被定为了add 9的操作
// 保留了num = 9时的状态
const add9 = basicAdd(num);
num ++;
console.log(`result is: ${add8(10)}`);
console.log(`result is: ${add9(10)}`);
console.log(`the finnal num is: ${num}`);
运行结果
At inner function num is: 8
At inner function num is: 9
result is: 18
result is: 19
the finnal num is: 10
结合之前了解的函数柯里化以及Javascript函数式编程
函数的魅力实在是无穷大