首頁  >  問答  >  主體

javascript - 關於i值為什麼等於5的問題

(function(){
    for(var i = 0; i < 5; i++) {}
    console.log(i) // i = 5
})()

第一個問題:請問這屬於js的哪一部分知識內容?
第二個問題:通俗地解釋下為什麼i會等於5?
0o0

欧阳克欧阳克2686 天前882

全部回覆(8)我來回復

  • PHP中文网

    PHP中文网2017-06-12 09:31:37

    這個問題是閉包嗎? 我覺得併不是閉包,並沒有函數的嵌套. 它就是一個 函數本地變量匿名函數 的問題.

    創建一個匿名函數並立即執行並沒有涉及閉包吧. 只是循環結束, i 的值變成5 退出循環, console.log(i)打印當前的i, 即5.

    這與以下是等同的:

    var test = function() {
        for(var i = 0; i < 5; i++) {}
        console.log(i) // i = 5
    }
    test();

    回覆
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-06-12 09:31:37

    這不屬於閉包,只是for的循環速度後印了一下值而已

    回覆
    0
  • 怪我咯

    怪我咯2017-06-12 09:31:37

    這是個 js 沒有區塊級作用域的問題,只有函數作用域導致的問題。 。 。居能直接扯上閉包。 。 。我服。 。 。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-12 09:31:37

    在JavaScript中是沒有區塊級作用域這麼一說的,所以for循環{}以及if語句{}內部的變量,在外部是可以存取的。

    作用域分為全域作用域和局部作用域

    全域作用域是當你建立一個文件的時候,系統為你內建的。
    局部作用域是透過建立一個函數來實現的。

    回覆
    0
  • 怪我咯

    怪我咯2017-06-12 09:31:37

    • 這個一般都出現在考察閉包的問題中

    • i + 1 循環了5次,所以 i 是 5

    回覆
    0
  • ringa_lee

    ringa_lee2017-06-12 09:31:37

    1. 你應該想了解js中的閉包部分問題

    2. 因為執行console.log時for迴圈執行完成了 i自然等於5

    回覆
    0
  • 怪我咯

    怪我咯2017-06-12 09:31:37

    去看看閉包結合定時器吧,或是事件綁定

    回覆
    0
  • ringa_lee

    ringa_lee2017-06-12 09:31:37

    js中的閉包,

    回覆
    0
  • 取消回覆