方程1执行完后在执行盏中pop出来, 然而它们的变量都还在,如果这个pop出去的方程1返回的也是个方程2,而且这个方程2里面需要方程1的变量,那么这个方程2依然能访问这些变量。 这就是Closures。
如下代码:
function buildFunctions() {
var arr = [];
for (var i = 0; i < 3; i++) {
arr.push(
function() {
console.log(i);
}
)
}
return arr;
}
var fs = buildFunctions();
fs[0]();
fs[1]();
fs[2]();
function buildFunctions2() {
var arr = [];
for (var i = 0; i < 3; i++) {
arr.push(
(function(j) {
return function() {
console.log(j);
}
}(i))
)
}
return arr;
}
var fs2 = buildFunctions2();
fs2[0]();
fs2[1]();
fs2[2]();
function buildFunctions3() {
var arr = [];
for (var i = 0; i < 3; i++) {
let j = i;
arr.push(
function(){
console.log(j);
}
);
}
return arr;
}
var fs3 = buildFunctions3();
fs3[0]();
fs3[1]();
fs3[2]();
上图解释:
Reference:
https://www.udemy.com/understand-javascript/learn/v4/t/lecture/2237546?start=0