笔记:闭包

266 阅读1分钟

关于闭包的一些思考

今天大胖问我什么是"闭包'',我没有回答上来

之前对闭包的理解一直停留在私有变量,闭了“内部”的环境的阶段

直到看到了轮子哥的这句话:

闭包不是私有,闭的意思不是“封闭内部状态”,而是“封闭外部状态”,当外部状态的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函数式编程

函数的魅力实在是无穷大