小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

JavaScript變量和函數(shù)的預(yù)解析

 以怪力亂神 2018-09-12
預(yù)解析:在解析代碼之前做一些處理

預(yù)解析做什么處理?
把變量的聲明提前了----提前到當(dāng)前所在的作用域的最上面
函數(shù)的聲明也會(huì)被提前---提前到當(dāng)前所在的作用域的最上面





那么我們現(xiàn)在開始舉幾個(gè)例子


1、觀察下方的第一個(gè)紅框中的代碼,猜猜它的結(jié)果是什么?
 
 
通過運(yùn)行我們發(fā)現(xiàn),代碼竟然神奇的沒有報(bào)錯(cuò)?但是輸出的也不是下面賦值的1而是undefined,這到底是為什么呢?其實(shí)這就是因?yàn)閖s引擎的預(yù)解析將num這個(gè)變量的聲明提前到作用域的最上方(num是全局變量所以提前到最外層也就是script標(biāo)簽內(nèi)的最上方),導(dǎo)致代碼變成了第二個(gè)紅框中的代碼,所以在輸出num的時(shí)候num還沒有被賦值導(dǎo)致控制臺(tái)輸出undefined。

2、觀察下方的第一個(gè)紅框中的代碼,猜猜它的結(jié)果是什么?
 
 
結(jié)果是undefined,此題要注意的就是輸出語(yǔ)句所在的函數(shù)內(nèi)有一個(gè)與全局變量重名的變量num,此時(shí)要注意局部變量可不會(huì)覆蓋全局變量,局部變量num由于預(yù)解析將聲明放在了其作用域頂部(它的作用域就是函數(shù)f1內(nèi)部所以提前到函數(shù)內(nèi)容頭部),此時(shí)其并沒有賦值所以會(huì)輸出undefined。

3、那么我們吧var=10”去掉又會(huì)如何呢?觀察下方的第一個(gè)紅框中的代碼,猜猜它的結(jié)果是什么?
 
 
結(jié)果是并不是輸出 20 而是 undefined,你猜對(duì)了么?
那么為什么會(huì)輸出undefined呢?就是因?yàn)閖s引擎會(huì)對(duì)其進(jìn)行預(yù)解析,解析過程就是將變量的聲明(千萬(wàn)要注意僅僅是聲明并不包括賦值)和函數(shù)聲明提前到作用域的最上方,最終變成第二個(gè)紅框中的代碼。

4、觀察下方的第一個(gè)紅框中的代碼,猜猜它的結(jié)果是什么?
 

結(jié)果并不是輸出1和2而是輸出兩次2,原因是經(jīng)過預(yù)解析以后第一個(gè)紅框中的代碼變成了第二個(gè)紅框中的代碼,而且藍(lán)框中的函數(shù)名字和綠框中的函數(shù)名字一模一樣,所以綠框中的函數(shù)會(huì)覆蓋藍(lán)框中的函數(shù)最終導(dǎo)致藍(lán)框中的函數(shù)消失,所以下方兩次調(diào)用的都是綠框中的函數(shù)。怎么樣,這次你猜對(duì)了么?

拓展:注意變量的名字和函數(shù)的名字也不能相同,否則同樣會(huì)發(fā)生覆蓋!示例如下
 

顯然結(jié)果并不是undefined,而是函數(shù)。

5、觀察下方的代碼,猜猜它的結(jié)果是什么?
 

結(jié)果是
1
11
2
22
可見兩個(gè)script標(biāo)簽中的代碼并沒有發(fā)生覆蓋。

拓展:經(jīng)過我個(gè)人測(cè)試,第二對(duì)script標(biāo)簽中代碼執(zhí)行的規(guī)律是如果第二對(duì)script標(biāo)簽中存在將要使用的變量或函數(shù)那就使用這個(gè)變量和函數(shù),如果不存在那就去第一對(duì)script標(biāo)簽中查找如果存在就拿來使用。

6、觀察下方的第一個(gè)紅框中的代碼,猜猜它的結(jié)果是什么?
 
 
答案是
9
9
9
9
9
報(bào)錯(cuò)
前面預(yù)解析部分沒有什么特殊的,要注意綠框中的代碼,不要想當(dāng)然的認(rèn)為連等賦值全是顯式局部變量,事實(shí)上除了第一個(gè)是顯式局部變量后兩個(gè)都是隱式全局變量。

7、觀察下方的第一個(gè)紅框中的代碼,猜猜它的結(jié)果是什么?
  
 

答案是無法運(yùn)行直接報(bào)錯(cuò),這是因?yàn)轭A(yù)解析把變量聲明提前,而給f1賦值并不會(huì)提前。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多