console.log(insane); // 報錯
}}}};
上面**使用了乙個五層的塊級作用域,每一層都是乙個單獨的作用域。第四層作用域無法讀取第五層作用域的內部變數。但內層作用域可以定義外層作用域的同名變數。如下:
}}}};
(2)塊級作用域的出現,實際上使得獲得廣泛應用的匿名立即執行函式表示式(匿名 iife)不再必要了。
// iife 寫法
(function () ());
// 塊級作用域寫法
3、塊級作用域與函式宣告
(1) es6 引入了塊級作用域,明確允許在塊級作用域之中宣告函式。—塊級作用域之中,函式宣告語句的行為類似於let,在塊級作用域之外不可引用:
function f()
(function ()
} f();
}());
上面**在 es5 中執行,會得到「i am inside!」,因為在if內宣告的函式f會被提公升到函式頭部,實際執行的**如下。
// es5 環境
function f()
(function ()
if (false)
f();
}());
(2) 如果改變了塊級作用域內宣告的函式的處理規則,顯然會對老**產生很大影響。為了減輕因此產生的不相容問題,es6 在附錄 b裡面規定,瀏覽器的實現可以不遵守上面的規定,有自己的行為方式:
a.允許在塊級作用域內宣告函式。
b.函式宣告類似於var,即會提公升到全域性作用域或函式作用域的頭部。
c.同時,函式宣告還會提公升到所在的塊級作用域的頭部。
根據這三條規則,瀏覽器的 es6 環境中,塊級作用域內宣告的函式,行為類似於var宣告的變數。
es5 只有兩種宣告變數的方法:var命令和function命令。
es6 除了新增let和const命令,還有另外兩種宣告變數的方法:import命令和class命令。所以,es6 一共有 6 種宣告變數的方法。
特別鳴謝:阮一峰前輩
ES6 let 和 const命令(學習筆記)
1.暫時性死區 只要塊級作用域內有 let 命令,它所宣告的變數就繫結 bounding 這個區域,不再受外部的影響。也就是說在 塊內使用 let 命令宣告變數之前,該變數都是不可用的,在語法上,這被稱為 暫時性死區 var tmp 123 if true es6明確規定,如果區塊中存在 let 和...
ES6 let變數宣告
var 宣告的變數在window上 用let或者const去宣告變數,這個變數不會被放到window上 array.foreach function currentvalue,index,arr thisvalue 如果瀏覽器對let已經支援了,其實絕大部分情況下var都可以被替換成let,以後盡量...
es6 let命令的基本用法
首先,let命令是es6新增的,也是用來宣告變數的,但它與var不同的是 只在let命令所在的 塊內有效 換一句話說就是 let命令宣告的變數只在當前作用域內有效 包括它的子作用域 那麼結合它的特徵概括起來就是 let是es6用來宣告只在當前作用域內有效,不存在變數提公升,不能重複宣告的,會形成暫時...