阮一峯老師開源做品。javascript
書上的示例代碼能夠經過 在線網站代碼調試工具 JS Bin 調試。html
每一個變量或函數經過執行環境 (execution context) 定義了其有權訪問的其餘數據,決定了他們各自的行爲;java
全局執行環境是最頂層的執行環境,根據宿主環境的不一樣,表示全局執行環境的對象也不一樣:在瀏覽器中爲 window 或 self 對象,在 Node.js 中爲 global;es6
每一個執行環境都有一個與之相關聯的變量對象 (variable object) ,存儲了改環境中定義的全部變量和函數;瀏覽器
做用域(scope chain) 存儲了與當前執行環境相關的全部變量對象,第一個爲當前執行環境關聯的變量對象,而後是包含環境的變量對象,直至全局執行環境的變量對象,即全局執行環境;函數
在代碼中查找變量的值稱爲變量解析(variable name resolution),查找順序是沿做用域鏈一級一級向外搜索;工具
ES5 規定函數只能在頂層做用域和函數做用域之中聲明,不能在塊級做用域聲明,但瀏覽器爲兼容舊代碼,仍容許在塊級做用域中聲明;網站
ES6 明確容許函數在塊級做用域聲明,但應儘可能使用函數表達式形式,以下:調試
let f = function () { return a; };
只在它所在的代碼塊有效;code
只能先聲明後使用,不存在變量提高;
在其聲明所在的代碼塊,不受外部影響,造成暫時性死區;
不能重複聲明;