今天大胖问我什么是"闭包'',我没有回答上来编程
以前对闭包的理解一直停留在私有变量,闭了“内部”的环境的阶段bash
直到看到了轮子哥的这句话:闭包
闭包不是私有,闭的意思不是“封闭内部状态”,而是“封闭外部状态”,当外部状态的scope失效的时候,还有一份留在内部状态里面函数式编程
茅塞顿开!!!函数
而后本身试着作了一下简单的例子ui
// 定义了一个相加函数
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}`);
复制代码
运行结果spa
At inner function num is: 8
At inner function num is: 9
result is: 18
result is: 19
the finnal num is: 10
复制代码
结合以前了解的函数柯里化以及Javascript函数式编程code
函数的魅力实在是无穷大ip