什么是闭包
闭包就是能够读取其他函数内部变量的函数。在 JS 中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解为”定义在一个函数内部的函数”。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| function fn() { let b = 1; function box() { console.log(b); }
return box; }
let res = fn();
setTimeout(function () { res(); }, 2000);
|
闭包的特点
- 可以读取函数内部的变量。
变量的作用域无非就是两种:全局变量和局部变量。
JS 语言的特殊之处,就在于函数内部可以直接读取全局变量。另一方面,函数外部自然无法读取函数内的局部变量。
- 让这些变量的值始终保存在内存中。
闭包的应用场景
- 函数作为返回值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function box() { let n = 1; function cox() { n++; return n; }
return cox; }
let res = box();
console.log(res()); console.log(res());
|
- 函数作为参数被传递
回调函数
闭包深度解析参考
阮一峰博客:学习 Javascript 闭包(Closure)