聲明提升: JavaScript函數裏的所有聲明(只是聲明,但不涉及賦值)都被提前到其當前作用環境的頂部,而變量賦值操作留在原來的位置。函數提升優先級比變量提升要高,且不會被變量聲明覆蓋,但是會被變量賦值覆蓋。
function fun(){ console.log ("函數");}
var fun;
console.log("第一個:" + fun); 輸出:function a(){}fun = "變量";
console.log("第二個:" + fun); 輸出“變量”;
例子:(1)函數表達式的聲明提升
var getName = function(){
console.log(2);
}
function getName (){
console.log(1);
}
getName();
提升後:
function getName(){ //函數聲明提升到頂部
console.log(1);
}
var getName; //變量聲明提升
getName = function(){
//變量賦值依然保留在原來的位置
console.log(2);
}
getName(); // 最終輸出:2
例子(2)函數聲明提升
f('hanshu');
function f(name){
console.log(name);
}
提升後:
function f(name){
console.log(name);
}
f('hanshu');