javascript - 這道js題看不懂
某草草
某草草 2017-05-19 10:44:12
0
9
659
雷雷
某草草
某草草

全部回覆(9)
给我你的怀抱

雷雷 雷雷

过去多啦不再A梦

難不成你以為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是先自增再引用

PHPzhong

雷雷

漂亮男人

第一次執行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會在運算完這條指令後再自加。

小葫芦

0的原因是會先執行console.log然後i再自增,而f1和f2中的i是沒有聯繫的,且因為有閉包的原因,再次執行f1就會得到1。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板