摘要:代碼的執(zhí)行分為兩個步驟預(yù)解析提升代碼在預(yù)解析階段,會對以聲明的變量名,和開頭的語句塊,進行提升操作執(zhí)行變量的提升提升之后的代碼模擬函數(shù)同名,如何提升預(yù)處理的時候,會將兩個函數(shù)全部提升,但是后面的函數(shù)會覆蓋掉前面函數(shù)預(yù)解析提升后的代碼變量和函
js代碼的執(zhí)行分為兩個步驟
1.預(yù)解析
提升(hoisting) JavaScript代碼在預(yù)解析階段,會對以var聲明的變量名,和function開頭的語句塊,進行提升操作
2.執(zhí)行
func(); function func(){ alert("Funciton has been called"); } //變量的提升 alert(a); var a = 1; //提升之后的代碼模擬 var a; alert(a); a = 1;
函數(shù)同名,如何提升
預(yù)處理的時候,會將兩個函數(shù)全部提升,但是后面的函數(shù)會覆蓋掉前面函數(shù)
func1(); //last function func1(){ console.log("This is first func1"); } func1(); //last function func1(){ console.log("This is last func1"); } //預(yù)解析提升后的代碼 function func1(){ console.log("This is first func1"); } function func1(){ console.log("This is last func1"); } func1(); //last func1(); //last
變量和函數(shù)同名
在提升的時候,如果有變量和函數(shù)同名,會忽略掉變量,只提升函數(shù)
alert(foo); //undefined 函數(shù)體 function foo(){} var foo = 2; alert(foo); //2 //預(yù)解析 提升后的代碼 function foo(){}; alert(foo); foo=2; alert(foo);
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108078.html
摘要:什么是函數(shù)作用域下的變量提升和函數(shù)提升函數(shù)作用域中也存在變量提升和函數(shù)提升,這個和全局作用域下的情況是一模一樣的,就是把作用域想成是全局的就可以了。 在js中有一部分比較難以理解,卻也是在筆試過程中很容易考的,那就是變量提升和函數(shù)提升的問題,這篇文章我會就變量提升和函數(shù)提升的問題拓展一下有關(guān)js函數(shù)的知識點,包括作用域的問題,后面還會有一些小練習(xí)來判斷自己是否真的搞懂了。 作用域 在j...
摘要:聲明提升變量和函數(shù)聲明提升發(fā)生在預(yù)編譯階段。上面代碼,函數(shù)內(nèi)相當(dāng)于對全局變量進行賦值函數(shù)聲明提升創(chuàng)建函數(shù)有兩種方式,函數(shù)聲明和函數(shù)表達式,只有函數(shù)聲明存在提升。同時聲明變量和函數(shù)顯示的是,初步證明的優(yōu)先級高于。 聲明提升 變量和函數(shù)聲明提升發(fā)生在JavaScript預(yù)編譯階段。 所謂的聲明提升,就是說變量或者函數(shù)在聲明的時候會被提前到當(dāng)前作用域的頂部,已經(jīng)處于可訪問狀態(tài)。 變量聲明提升...
摘要:所謂變量提升,提升就是為了事先聲明變量。變量提升之后,但其賦值還是留在原本的位置等運行到了之后動態(tài)賦值,而函數(shù)提升之后直接相當(dāng)于在代碼里抽空了。搞明白這個例子也就搞懂了作用域中變量和函數(shù)是怎么提升的。 問題 showImg(https://segmentfault.com/img/bVJ614?w=222&h=165); 在這個例子中它應(yīng)該輸出什么?輸出的結(jié)果是6。 showImg(h...
摘要:變量的作用域無非就是兩種全局變量和局部變量。其中內(nèi)部函數(shù)中可以訪問外部函數(shù)的變量,是因為內(nèi)部函數(shù)的作用域鏈中包含了外部函數(shù)的作用域也可以理解為內(nèi)部函數(shù)的作用范圍輻射到了外部函數(shù)的作用范圍另一方面,在函數(shù)外部自然無法讀取函數(shù)內(nèi)的局部變量。 以前學(xué)習(xí)的時候,了解過變量提升和閉包,但是沒有深入了解,網(wǎng)上查了資料,這里記錄下,只供參考。部分內(nèi)容引用: https://www.cnblogs.c...
摘要:但是碰到聲明提升,這種想法就會被打破。聲明一個函數(shù)進行相應(yīng)的操作,會得到函數(shù)聲明提升的結(jié)果。由此可以發(fā)現(xiàn)變量和函數(shù)的聲明都會被提升在其他代碼的前面執(zhí)行。一個普通塊內(nèi)部的函數(shù)聲明通常會被提升到所在的作用域的頂部。的創(chuàng)建初始化和賦值均會被提升。 Javascript聲明提升 在分析聲明提升之前,我認為有必要知道的兩點: 一、引擎查詢變量的兩種方式 引擎查詢變量的方式可以分為LHS和RHS兩...
摘要:函數(shù)和變量相比,會被優(yōu)先提升。這意味著函數(shù)會被提升到更靠前的位置。僅提升聲明,而不提升初始化。 JavaScript 函數(shù)高級——執(zhí)行上下文與執(zhí)行上下文棧(圖解+典型實例分析) 變量提升與函數(shù)提升 變量聲明提升 通過 var 定義(聲明)的變量,在定義語句之前就可以訪問到 值:undefined /* 面試題 : 輸出 undefined */ var a = 3 ...
閱讀 2642·2021-10-14 09:47
閱讀 4935·2021-09-22 15:52
閱讀 3360·2019-08-30 15:53
閱讀 1454·2019-08-30 15:44
閱讀 679·2019-08-29 16:41
閱讀 1655·2019-08-29 16:28
閱讀 444·2019-08-29 15:23
閱讀 1627·2019-08-26 12:20