為什麼要使用塊級作用域?
1.在預編譯階段,變數的宣告會被提公升到作用域頂部,而初始化操作依舊留在原處執行,在該作用域中未定義變數的地方也能訪問到該變數,但是此時變數尚未初始化,所以其值為undefined,為此es6引入塊級作用域來強化對變數生命週期的控制;
塊級宣告:
1.塊級作用域用於宣告在指定塊的作用域之外無法訪問的變數;
2.塊級作用域存在於:
a.函式內部;
b.塊中();
let宣告:
1.使用let宣告可以把變數的作用域限制在當前**塊中;
2.let宣告不會被提公升(不會被提公升到函式作用域頂部),let宣告語句通常放在封閉**塊的頂部,以便整個**塊都可以訪問;
3.如果在if條件語句內用let宣告變數,則執行流離開if塊,被宣告的變數立刻被銷毀,且當if裡面的條件不符合時,永遠不會進入if宣告變數並初始化變數;
4.var count=30;
let count=40;
錯誤:在同一作用域中不能用let宣告已經存在的識別符號;
var count=30;
if(a)不會報錯,此處的let是在if塊內宣告了新的變數count,內部塊中的count會遮蔽全域性作用域中的count,後者只能在if塊內才能訪問得到;
5.const宣告:
a.const宣告的變數是常量;
b.const宣告的變數必須進行初始化,否則會報錯;
c.const和let宣告的都是塊級識別符號,所以常量也只是在當前**塊內有效,一旦執行到塊外就會被立即銷毀;
d.const宣告的常量同樣也不會被提公升到作用域頂部;
e.const不能宣告在同一作用域內已經被var或者let宣告的變數,無論是否在嚴格模式下,都不可以為const定義的常量再賦值,否則會報錯;但是如果用const宣告的變數是物件,則物件中的值可以修改,但是不能修改繫結,只能修改屬性值;
ES6的塊級作用域
let為j ascript新增了塊級作用域,外層作用域無法獲取到內層作用域,這樣非常安全。即使外層和內層都使用相同變數名,也都互不干擾。例如 1 function test 7 console.log a 輸出 18 910 test 呼叫函式 塊級作用域,允許函式可以在塊級作用域中宣告。在塊級作用...
es6 塊級作用域用法
iife 寫法 function 塊級作用域寫法 塊級作用域的出現,實際上使得獲得廣泛應用的立即執行函式表示式 iife 不再必要了。function f function f 上面 在 es5 jscript不支援塊級作用域環境中執行,會得到 i am inside 因為在 if內宣告的函式f會被...
es6學習 塊級作用域let const
先安裝node 新建1.js檔案,通過node的 cmd進入本地檔案1.js 執行 node 1.js 可以測試以下 1.基本用法 let 宣告變數,只在塊級作用域有效。console.log a a is not defined console.log b 2 在for 迴圈中使用,迴圈和迴圈內部...