JS引擎的工做方式:先解析代碼,獲取全部被聲明的變量,而後再一行一行的運行函數
console.log(a) // undefined var a = 2
至關於code
var a console.log(a) a = 2
這就是變量提高作用域
函數聲明也會提高,而且優先於表達式
getName() // 1 function getName() { console.log('1') } var getName = function() { console.log('2') } getName() // 2
ES6的let\const
不會變量提高get
typeof a // ReferenceError: a is not defined let a
由於let
不會變量提高,因此在聲明前調用會報錯it
let x = 'outer value' !(function(){ console.log(x) // Cannot access 'x' before initialization let x = 'inner value' })()
ES6規定,let/const
命令會使區塊造成封閉的做用域,在這個做用域下,從進入到變量能夠訪問之間的一段時間,就稱之爲暫時性死區,在暫時性死區,該變量都是不可用的io