搜尋

首頁  >  問答  >  主體

javascript - 這道js題看不懂

雷雷
某草草某草草2857 天前661

全部回覆(9)我來回復

  • 给我你的怀抱

    给我你的怀抱2017-05-19 10:46:12

    雷雷 雷雷

    回覆
    0
  • 过去多啦不再A梦

    过去多啦不再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了。

    回覆
    0
  • 高洛峰

    高洛峰2017-05-19 10:46:12

    這就是 i++ 和 ++i 的差別了,i++是先引用後自增,++i是先自增再引用

    回覆
    0
  • PHPz

    PHPz2017-05-19 10:46:12

    雷雷

    回覆
    0
  • 漂亮男人

    漂亮男人2017-05-19 10:46:12

    第一次執行f1的時候,輸出0,因為是i++,所以先輸出i,後加,再執行時候,i這時候為1,同理,輸出2。執行f2時候,因為i為0,所以輸出了0。也就是f1和f2作用域不一樣,所以i引用的也就不一樣。

    回覆
    0
  • 習慣沉默

    習慣沉默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()不會執行

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-19 10:46:12

    i++是先運算後加減,所以先輸出0,之後才變成1

    回覆
    0
  • 阿神

    阿神2017-05-19 10:46:12

    因為++是運算後自加運算子。 i會在運算完這條指令後再自加。

    回覆
    0
  • 高洛峰

    高洛峰2017-05-19 10:46:12

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

    回覆
    0
  • 取消回覆