闭包
/**
* bar()是定义在 foo() 里的内部函数,仅在该函数体内可用。
* bar()内没有自己的局部变量,然而它可以访问到外部函数的变量,
* bar() 可以使用父函数 foo() 中声明的变量 name
*/
function foo() {
var name = 1; //name 是一个被 foo 创建的局部变量
function bar(){ //bar() 是内部函数,一个闭包
console.log(name); //使用了父函数中声明的变量
}
bar()
}
// foo()
function F() {
var f = []
for (var i = 0; i <= 2; i++) {
console.log(i);
f[i] = function() {
console.log(i);
}
}
return f
}
var f = new F()
for (var i = 0; i < f.length; i++) {
f[i]();
}
// 3
// 3
// 3