function foo() {
var i = 0;
return function() {
console.log(i++);
}
}
var f1 = foo(), f2 = foo();
f1();
f1();
f2();
为什么结果是0, 1, 0而不是1, 2, 1呢
function foo() {
var i = 0;
return function() {
console.log(i++);
}
}
var f1 = foo(), f2 = foo();
f1();
f1();
f2();
为什么结果是0, 1, 0而不是1, 2, 1呢
难不成你以为i是全局变量吗。
既然i是局部变量, f1里面的i和f2里面的i有什么关系?
至于为什么是0, 1 而不是1 ,2.
那是因为 i++ 实际上是 i = i + 1;
console.log(i++) , 是先打印了i, 然后才执行的 i = i + 1;
如果你改成 console.log(++i); 那么就是 1, 2了。
第一次执行f1的时候,输出0,因为是i++,所以先输出i,后加,再次执行时候,i这时候为1,同理,输出2。执行f2时候,因为i为0,所以输出了0。也就是f1和f2作用域不一样,所以i引用的也就不一样。
f1()就是执行
function() {
console.log(i++);
}
而i是f1的内部变量 ++之后自然输出 0 , 1
你代码加一行就懂了
function foo() {
var i = 0;
console.log(i);
return function() {
console.log(i++);
}
}
新加的console.log只会在 var f1 = foo() 时执行 而f1()不会执行
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决