程式在執行過程中,會先將**讀取到記憶體中檢查,會將所有的宣告在此時進行標記,從而讓js直譯器知道有這個名字,後面在使用名字的時候,不會出現未定義的錯誤
變數的宣告
變數的宣告就是讓js直譯器知道有這個名字,沒有任何資料與之對應
函式的宣告
函式的宣告分為函式名和函式體兩部分
函式名的宣告與變數的宣告方式一致
函式體宣告即告訴js直譯器這個名字對應的函式體是什麼
函式宣告與函式表示式的區別:函式宣告是單獨寫在乙個結構中,不存在任何語句結構中
舉個栗子
函式宣告
f(); //執行不會報錯
functionf()
//對應的預解析過程
var f; //函式名宣告 此時f=undefined
函式體宣告 //此時f存放該函式體的位址
函式表示式
f(); //執行會報錯:f is not a function
if(true)
}//對應的預解析過程
var f; //函式名宣告 此時f=undefined
if(true) //函式表示式賦值 此時f存放該函式體的位址
}
**1分析
var num = 1;
function
num()
num();
//對應的預解析過程
var num; //此時num=undefined
//第二步:函式宣告 此時num指向函式體的記憶體空間
num = 1; //此時num=1 函式體無人引用
num(); //報錯: num is not a function
**2分析
var num = 123;
functionf()
//對應的預解析過程
var f;
var num;
//函式體宣告
num = 123;
//f函式體內對應的預解析過程
function
f()
**3分析
if(!'a'
inwindow)
console.log(a);
//對應的預解析過程
var a;
//'a'
inwindow 為 true
if(false)
console.log(a); //
undefined
**4分析
if(true)
} else
}f();
//對應的預解析過程
var f;
if(true)
} else
}f(); //true
JS函式和宣告提公升
目錄語法 function 函式名 形參1,形參2,匿名函式 var f1 function 形參1,形參2,f1 1,2 立即執行函式 function a,b 1,2 在函式體內通過arguments物件來訪問引數陣列,從而獲取傳給函式的每個引數。可以通過索引取到引數。function add ...
原型鏈與宣告提公升 預解析
顯示原型prototype 隱式原型 prototype proto 已被棄用,現在用 prototype 代替 當訪問乙個物件的某個屬性時,會先在這個物件本身屬性上查詢,如果沒有找到,則會去它的 prototype 隱式原型上查詢,即它的建構函式的prototype,如果還沒有找到就會再在建構函式...
JS高階之預解析
提前賦值 預解析結束後,在逐行解讀 console.log a var a 1 解析過程 var a console.log a a 1 console.log b var b 123 functionb 解析過程 var b 函式,在正式執行 前,賦值為整個函式塊 functionb consol...