TODO 查阅原文(English Version)后 在ES6语法的基础上添加Demo代码
from 彻底搞懂JS闭包各种坑
闭包指的是:能够访问另一个函数作用域的变量的函数。清晰的讲:闭包就是一个函数,这个函数能够访问其他函数的作用域中的变量。
function outer() {
var a = "变量1";
var inner = function () {
console.info(a);
};
return inner; // inner 就是一个闭包函数,因为他能够访问到outer函数的作用域
}
// @see https://es6.ruanyifeng.com/#docs/let
const outer = () => {
const result = [];
// for (var index = 0; index < 10; index++) {
// var 全局声明变量index result[]内的所有function均打印的是循环结束后的index
// 10 10 10 10 10...
for (let index = 0; index < 10; index++) {
// 使用let 声明的变量仅在块级作用域内有效 每一次都是新变量
// 0 1 2 3 4....
result[index] = () => {
console.log(index);
};
}
return result;
};
const result = outer();
result.forEach((resultFuc) => {
resultFuc();
});