函數(shù)提升和變量提升實(shí)例

-版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
-本文鏈接:https://blog.csdn.net/sinat_41695090/article/details/81284355

首先來(lái)段總結(jié)

引擎在讀取Js代碼的過(guò)程中,分為兩步。第一個(gè)步驟是這個(gè)Js代碼的解析讀取,第二個(gè)步驟是執(zhí)行。

在讀取代碼的過(guò)程中,就產(chǎn)生了將所有聲明提升到頂端,然后再?gòu)纳贤聢?zhí)行。由此產(chǎn)生了變量提升和函數(shù)提升。
1.變量提升只會(huì)提升變量名的聲明,而不會(huì)提升變量的賦值初始化。
2.函數(shù)提升的優(yōu)先級(jí)大于變量提升的優(yōu)先級(jí),級(jí)函數(shù)提升在變量提升之上。
記住這兩句話就可以從容不迫的寫(xiě)代碼了

console.log(foo);
foo();        //可以執(zhí)行  
var foo = 10;
foo();        //foo已經(jīng)被賦值為一個(gè)變量,無(wú)法執(zhí)行為foo為函數(shù)
console.log(foo);
function foo(){
  var a;
  console.log(a);
  a = 12;
  console.log(a);
}
console.log(foo);

-猜猜輸出什么?


image.png

-實(shí)際的執(zhí)行順序

function foo(){
  var a;
  console.log(a);
  a = 12;
  console.log(a);
}
var foo();
console.log(foo);
foo();
foo = 10;
foo();      //由于這里報(bào)錯(cuò),foo已經(jīng)被賦值,找不到這個(gè)函數(shù),下面的都不會(huì)被執(zhí)行
console.log(foo);
console.log(foo);

還有幾個(gè)例子總結(jié):

function foo(){
  console.log(x);
}
foo();
var x=1;     //undefined

-輸出結(jié)果:undefined

function foo(){
    var x=1;
}
foo();
console.log(x);

-輸出結(jié)果:報(bào)錯(cuò)!

function foo() {
  console.log(x);
}
var x =1;
foo();

-輸出結(jié)果:1

console.log(f1());
console.log(f2);
function f1(){
  console.log('aa');
}
var f2 = function(){};

-輸出結(jié)果依次是:aa,undefined,undefined

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容