(function(){ for(var i = 0; i < 5; i++) {} console.log(i) // i = 5 })()
第一個問題:請問這屬於js的哪一部分知識內容? 第二個問題:通俗地解釋下為什麼i會等於5? 0o0
温故而知新,可以为师矣。 博客:www.ouyangke.com
這個問題是閉包嗎? 我覺得併不是閉包,並沒有函數的嵌套. 它就是一個 函數本地變量 和 匿名函數 的問題.
創建一個匿名函數並立即執行並沒有涉及閉包吧. 只是循環結束, i 的值變成5 退出循環, console.log(i)打印當前的i, 即5.
i
5
console.log(i)
這與以下是等同的:
var test = function() { for(var i = 0; i < 5; i++) {} console.log(i) // i = 5 } test();
這不屬於閉包,只是for的循環速度後印了一下值而已
這是個 js 沒有區塊級作用域的問題,只有函數作用域導致的問題。 。 。居能直接扯上閉包。 。 。我服。 。 。
在JavaScript中是沒有區塊級作用域這麼一說的,所以for循環{}以及if語句{}內部的變量,在外部是可以存取的。
作用域分為全域作用域和局部作用域
全域作用域是當你建立一個文件的時候,系統為你內建的。 局部作用域是透過建立一個函數來實現的。
這個一般都出現在考察閉包的問題中
i + 1 循環了5次,所以 i 是 5
你應該想了解js中的閉包部分問題
因為執行console.log時for迴圈執行完成了 i自然等於5
去看看閉包結合定時器吧,或是事件綁定
js中的閉包,
這個問題是閉包嗎? 我覺得併不是閉包,並沒有函數的嵌套. 它就是一個 函數本地變量 和 匿名函數 的問題.
創建一個匿名函數並立即執行並沒有涉及閉包吧. 只是循環結束,
i
的值變成5
退出循環,console.log(i)
打印當前的i
, 即5.這與以下是等同的:
這不屬於閉包,只是for的循環速度後印了一下值而已
這是個 js 沒有區塊級作用域的問題,只有函數作用域導致的問題。 。 。居能直接扯上閉包。 。 。我服。 。 。
在JavaScript中是沒有區塊級作用域這麼一說的,所以for循環{}以及if語句{}內部的變量,在外部是可以存取的。
作用域分為全域作用域和局部作用域
全域作用域是當你建立一個文件的時候,系統為你內建的。
局部作用域是透過建立一個函數來實現的。
這個一般都出現在考察閉包的問題中
i + 1 循環了5次,所以 i 是 5
你應該想了解js中的閉包部分問題
因為執行console.log時for迴圈執行完成了 i自然等於5
去看看閉包結合定時器吧,或是事件綁定
js中的閉包,