了解全局作用域,函數作用域和塊級作用域之間的區別。了解哪些變數在哪些地方可用。知道 JavaScript 引擎如何執行變數查詢。
JavaScript基本觀念之一,在JavaScript有兩種類型的作用域。
- Global Scope (全域)
- Local Scope (區域)
在函數之外定義的變數是全域變數,每個函式被調用時,會創建一個新的作用域
Global Scope
1 | var name = 'Stoner'; |
Local Scope
1 | // Global Scope |
ES6
在ES6中新增了兩個宣告變量 let、const
- let 宣告了一個塊級作用域的局部變數,它的作用範圍為最接近的塊作用域(如果在所有塊以外就是全局作用域),這將會比 var 的函數作用域更小。
- const 宣告的是一個只讀的變數,而該變數一旦宣告,變數的值就無法更改。const 宣告的變數不得改變值,也就是說,const 一旦宣告變數,就必須立即初始化,不能留到之後給值。
- const 和 let 只在宣告所在的塊級作用域内有效。
- 宣告變數後就必須綁定在這區域不再受到外部影響。
- 是不可重複宣告變數。
- 必須在嚴格模式下才可以使用 const let。
- const 和 let 不存在提升(Hoisting)。
1 | console.log(i); // 输出 undefined |
更多範例
1 | //下面是宣告一個全域變數 a,然後值為 1,所以在後面的匿名函式中可以使用它 |
原文
JavaScript 中的作用域(scope)和提升(hoisting)
[筆記] JavaScript 變數宣告與作用域
Understanding Scope in JavaScript
Understanding Scope in JavaScript(中文)