《你不知道的js》第二版上捲第三章筆記全域性作用域:定義在函式外部的變數,函式內部可以呼叫
區域性作用域:定義在函式內部的變數,函式外部不可以呼叫
塊級作用域:(如同下面這個例子)
for
(var i=
1; i<
10; i++
)console.
log(i,b)
;//輸出的還是:10 100!!!
//說明js沒有塊級作用域
當我們需要在立即執行乙個函式,又不想暴露函式內部的變數,如何解決這個問題?
方法一:使用立即執行函式(iife)
var a =2;
(function
foo())
();console.
log(a)
;//undefined
//第二個引數的意義:作為變數傳入到函式中
(function
foo(global)
)(window)
;//立即函式定義的c在外面被遮蔽
// console.log(c);
方法二:es6定義的let
let定義的變數隱式地鎖在了任意的作用域中
//上面的例子中,暴露在全域性的for迴圈,當使用let去定義i,在外部就訪問不到i了
// console.log(k); 輸出為undefined
補充:es6中 const 定義常量 既然是常量了,就沒有更改的餘地 塊級作用域與函式作用域
函式作用域 變數在定義的環境中以及巢狀的子函式中處處可見 塊級作用域 變數在離開定義的塊級 後立即被 在es6之前,js的作用域只有兩種 函式作用域和全域性作用域。使用var宣告的變數,都存在變數提公升的過程。console.log a undefined console.log c undefin...
全域性作用域 函式作用域 塊級作用域的理解
作用域是任何一門程式語言中的重中之重,因為它控制著變數與引數的可見性與生命週期。很慚愧,我今天才深入理解js的作用域.我不配做乙個程式設計師.開玩笑,什麼時候理解都不晚,重要的是理解了以後能不能深深地扎在記憶裡,不能,那就寫下來在乙個 塊 括在一對花括號中的一組語句 中定義的所有變數在 塊的外部是不...
js塊級作用域
首先看乙個常見的函式,該函式輸出的是什麼呢?對的,就是5個6.為什麼會這樣呢?因為settimeout是個非同步函式,每次迴圈的時候都會建立乙個定時器,任務放到佇列裡,等主線程執行完才會執行定時器,這個時候迴圈跑完了,最後一次的 i 5 1 6,所以輸出5個6.for var i 1 i 5 i 1...