變量提高是指:使用var
聲明變量時,JS會將變量提高到所處做用域的頂部。舉個簡單的例子:javascript
console.log(foo); // undefined var foo = 'JavaScript'; // 輸出 undefined
上面的例子中,在聲明變量foo
以前打印這個變量,輸出了undefined
而沒有報錯。html
這樣的現象在函數中一樣存在:前端
function example(){ console.log(foo); var foo = 'Hello JavaScript' } example(); // 輸出:undefined
事實上,上面的代碼等價於:java
function example(){ var foo; console.log(foo); foo = 'Hello JavaScript' } example(); // 輸出:undefined
函數提高是指使用函數聲明建立函數時,把整個函數聲明提高到做用域的頂部的現象。
看下面的例子:函數
typeof foo; // function typeof bar; // undefined // 使用函數聲明建立函數 function foo(){ console.log('JavaScript'); } // 使用函數表達式建立函數 var bar = function(){ conosle.log('ECMAScript'); }
上面的例子中,使用函數表達式建立的函數bar
出現了變量提高;使用函數聲明建立的函數foo
出現了函數提高。code