雷雷 雷雷
難不成你以為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了。
這就是 i++ 和 ++i 的差別了,i++是先引用後自增,++i是先自增再引用
雷雷
第一次執行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()不會執行
i++是先運算後加減,所以先輸出0,之後才變成1
i++
因為++是運算後自加運算子。 i會在運算完這條指令後再自加。
0的原因是會先執行console.log然後i再自增,而f1和f2中的i是沒有聯繫的,且因為有閉包的原因,再次執行f1就會得到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了。
這就是 i++ 和 ++i 的差別了,i++是先引用後自增,++i是先自增再引用
雷雷
第一次執行f1的時候,輸出0,因為是i++,所以先輸出i,後加,再執行時候,i這時候為1,同理,輸出2。執行f2時候,因為i為0,所以輸出了0。也就是f1和f2作用域不一樣,所以i引用的也就不一樣。
f1()就是執行
而i是f1的內部變數 ++之後自然輸出 0 , 1
你程式碼加一行就懂了
新加的console.log只會在 var f1 = foo() 時執行 而f1()不會執行
i++
是先運算後加減,所以先輸出0,之後才變成1因為++是運算後自加運算子。 i會在運算完這條指令後再自加。
0的原因是會先執行console.log然後i再自增,而f1和f2中的i是沒有聯繫的,且因為有閉包的原因,再次執行f1就會得到1。