过去多啦不再A梦2017-05-19 10:46:12
難不成你以為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了。
漂亮男人2017-05-19 10:46:12
第一次執行f1的時候,輸出0,因為是i++,所以先輸出i,後加,再執行時候,i這時候為1,同理,輸出2。執行f2時候,因為i為0,所以輸出了0。也就是f1和f2作用域不一樣,所以i引用的也就不一樣。
習慣沉默2017-05-19 10:46:12
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()不會執行