示例1:
test();//彈出hello,因為函數聲明提升了。在調用函數之前,函數已經被讀取以完成聲明。
功能?測試(){
alert(“妳好”);
}例2:
?test();//錯誤:未捕獲?參考錯誤:?測試?是嗎?不是嗎?清晰的
//因為函數表達式不具有提升的特性,所以調用函數時沒有在作用域內讀取函數的定義。
//範圍讀取函數表達式按代碼順序讀取。
var?測試?=?函數(){
alert(“妳好”);
}
test();//彈出hello示例3:
if(條件){
功能?測試(){
alert(“妳好”);
}
}否則{
功能?測試(){
alert("世界");
}
}
//彈出世界,因為在代碼執行之前已經完成了函數聲明,作用域已經讀完了函數,不考慮條件。
//同名的函數聲明,下面的會覆蓋前面的。
test();
if(條件){
var?test2?=?函數(){
alert(“妳好”);
}
}否則{
var?test2?=?函數(){
alert("世界");
}
}
//彈出內容與條件相關,按照代碼執行順序讀取範圍讀取函數的表達式。
test2();示例4:
?//函數表達式
vartest?=?函數(){
alert(“妳好”);
}
//第壹次呼叫
test();
//變量聲明
var?s?=?“世界”;
//函數聲明
功能?測試(){
警報;
}
//第二次調用
test();
//解釋:hello會在兩次調用中彈出,而模式2在代碼執行前已經被作用域讀取,那麽執行模式1的代碼,模式1的測試覆蓋模式2的測試,然後hello會在兩次調用中彈出。