




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第JavaScript中的變量提升和函數(shù)提升目錄前言為什么有變量提升javascript變量提升和函數(shù)提升總結(jié)
前言
在js中對(duì)變量進(jìn)行操作后打印值經(jīng)常會(huì)出現(xiàn)undefined的現(xiàn)象。其實(shí)原因是因?yàn)閖s中有一個(gè)叫做變量提升的功
舉例:
vardata="lyyyyy";
getData();
functiongetData(){
//第一次打印
console.log("data值為:",data);
vardata="yyyyyyy";
//第二次打印
console.log("data值為:",data);
}
打印的值第一個(gè)為undefined,而第二個(gè)打印的值為yyyyy.
原因:
在執(zhí)行g(shù)etData()方法的時(shí)候會(huì)在函數(shù)內(nèi)部首先將變量的聲明提升到第一步。然后再聲明函數(shù)內(nèi)部的函數(shù)(如果函數(shù)內(nèi)部有函數(shù)的話)。之后才會(huì)按照方法內(nèi)部的邏輯先后順序執(zhí)行代碼。前兩步只是聲明?。?!看到這里應(yīng)該就已經(jīng)知道為什么會(huì)有上面那樣的結(jié)果了。
實(shí)際的方法內(nèi)部代碼執(zhí)行順序應(yīng)該是這樣的:
functiongetData(){
//一。聲明變量
vardata;
//二。聲明函數(shù)(如果函數(shù)內(nèi)部有函數(shù)的話)
//三。按照代碼的順序執(zhí)行
console.log("data值為:",data);
data="yyyyyyy";
//第二次打印
console.log("data值為:",data);
}
看到拆分后的代碼執(zhí)行順序?qū)Y(jié)果也就不迷茫了。
為什么有變量提升
那么為什么會(huì)出現(xiàn)變量提升這個(gè)現(xiàn)象呢
其實(shí)js和其他語(yǔ)言一樣,都要經(jīng)歷編譯和執(zhí)行階段。而js在編譯階段的時(shí)候,會(huì)搜集所有的變量聲明并且提前聲明變量,而其他的語(yǔ)句都不會(huì)改變他們的順序,因此,在編譯階段的時(shí)候,第一步就已經(jīng)執(zhí)行了,而第二步則是在執(zhí)行階段執(zhí)行到該語(yǔ)句的時(shí)候才執(zhí)行。
javascript變量提升和函數(shù)提升
變量提升是把變量提升提到函數(shù)頂部。需要說(shuō)明的是,變量提升只是提升變量的聲明,并不會(huì)把賦值也提升上來(lái)。函數(shù)提升是把整個(gè)函數(shù)都提到前面去。函數(shù)表達(dá)式不能被提升,函數(shù)聲明形式能被提升。
!DOCTYPEhtml
htmllang="en"
head
/head
body
script
//變量提升
functiontest(){
a=2;
vara;
console.log(a);
//2
}
test();
//變量提升,不會(huì)把賦值也提升上來(lái)
varv='HelloWorld';
(function(){
varv;
console.log(v);
//undefined
v='Iloveyou';
})();
//函數(shù)聲明形式能被提升
functionmyTest(){
foo();
functionfoo(){
console.log("helloworld");
//helloworld
}
}
myTest();
//函數(shù)表達(dá)式不能被提升
functionmyTest2(){
foo();
//fooisnotafunction
varfoo=functionfoo(){
console.log("helloworld");
}
}
myTest2();
/script
/body
/html
!DOCTYPEhtml
htmllang="en"
head
/head
body
script
//輸出GoodbyeJack
varname='World!';
(function(){
if(typeofname==='undefined'){
varname='Jack';
console.log('Goodbye'+name);
}else{
console.log('Hello'+name);
})();
//輸出HelloWorld!
varname2='World!';
(function(){
if(typeofname2==='undefined'){
name2='Jack';
console.log('Goodbye'+name2);
}else{
console.log('Hello'+name2);
})();
//輸出HelloWorld!
varname3='World!';
(function(){
if(typeof3==='undefined'){
varname3='Jack';
console.log('Goodbye'+name3);
}else{
console.log('Hello'+3);
})();
/script
/body
/html
總結(jié)
1.js會(huì)將變量的聲明提升到j(luò)s頂部執(zhí)行,因此對(duì)于這種語(yǔ)句:vara=2;其實(shí)上js會(huì)將其分為vara;和a=2;兩部分,并且將var
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)全紙多層密實(shí)紙箱行業(yè)投資前景及策略咨詢報(bào)告
- 2025年深圳市勞動(dòng)合同范本參考文獻(xiàn)
- 2025年中國(guó)舒安靈己酮可可堿市場(chǎng)調(diào)查研究報(bào)告
- 2025企業(yè)簽訂采購(gòu)合同的注意事項(xiàng)
- 購(gòu)銷終止合同協(xié)議書(shū)范本
- 朝花夕題目及答案
- 常識(shí)判斷刑法題目及答案
- 2025拼多多電商平臺(tái)店鋪代運(yùn)營(yíng)服務(wù)合同范本
- 雙方自愿合同協(xié)議書(shū)范本
- 巖板知識(shí)考試題及答案
- 專題17 語(yǔ)言要簡(jiǎn)明+考場(chǎng)滿分作文攻略-【同步作文課】【知識(shí)精研】七年級(jí)語(yǔ)文下冊(cè)單元寫作深度指導(dǎo)(統(tǒng)編版2024)
- 保潔合同協(xié)議書(shū)模板下載
- 2025法語(yǔ)DELFA15級(jí)閱讀理解試卷及答案
- 2025年全球經(jīng)濟(jì)策略試題及答案
- 山東省濟(jì)南市商河縣2025屆九年級(jí)下學(xué)期中考二模語(yǔ)文試卷(含答案)
- 知識(shí)產(chǎn)權(quán)國(guó)際保護(hù)課件
- 2024年棗莊滕州市中小學(xué)招聘教師筆試真題
- 2025年海南省中考模擬語(yǔ)文試題(含答案)
- 描繪人間溫情-怎樣刻畫人物 課件-2023-2024學(xué)年高中美術(shù)人美版(2019)選擇性必修1 繪畫
- 職業(yè)技術(shù)學(xué)校中醫(yī)康復(fù)技術(shù)專業(yè)人才培養(yǎng)方案
- 遼寧省名校聯(lián)盟2025年高考模擬卷押題卷數(shù)學(xué)(三)
評(píng)論
0/150
提交評(píng)論