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

分享

從未有過如此簡單粗暴的JavaScript解說——JS腳本運行機制

 chenTUPI 2017-02-20
來源:http://www.jianshu.com/p/d530bf4f44e3
作者:剽悍一小兔(簡書作者)
正文

首先,上幾道我編寫的 JS 題,作為分析的樣本。

請根據(jù)代碼,選擇正確的選項。


第一題

var a = 0;function test(){
   alert(a);
}
test();

A. 0

B. null
C. undefined


第二題

var a = 0;function test(){
   alert(a);
   a = 100;
}
test();

A. 0

B. null
C. undefined


第三題

var a = 0;function test(){
   alert(a);    var a = 100;
}
test();

A. 0

B. 100
C. undefined


正確答案:A;A;C


前兩題沒啥好說的,之前關(guān)于閉包的博文中已經(jīng)講得很清楚了,函數(shù) test 形成了自己的閉包,所以能夠訪問到全局作用域里面的變量 a 。


第三題可能有人會覺得有點奇怪,為啥是 undefined 的呢?雖然我在閉包內(nèi)定義了 var a = 100 , 可是它分明是在 alert 語句的下面啊,所以不是應該先打印出全局作用域里的 a 嗎?

不要著急,我們來講一個故事吧,當你將這段代碼放進瀏覽器跑起來的那一個瞬間,到底發(fā)生了哪些有趣的事情。


當你刷新瀏覽器之后。。。


0.00000001 毫秒的時候



編譯器看到了這句話,

var a = 0;

編譯器 : ‘nice,發(fā)現(xiàn)一個活的 a 變量,我要把它丟到作用域中去囚禁它!

于是



0.00000002 毫秒的時候

編譯器 : nice,發(fā)現(xiàn)一個活的 test 變量,我擦,還是一個函數(shù)類型,作用域,又有新貨了!

作用域 : ‘可以呀,小伙子!’

于是:



編譯器順便把 test 函數(shù)給“扒”了,又發(fā)現(xiàn)里面有這么一句話:

var a = 100;

編譯器:小樣,別以為你躲在 test 函數(shù)的私有作用域里面我就找不到你了,全局作用域中的a和你沒關(guān)系,你也進去!



編譯器:嗯,沒找到什么變量定義了,好,我去休息啦。


0.00000003 毫秒的時候

js引擎:終于輪到我出場了。


var a = 0;

a(全局): js引擎大哥,給我吃飯吧 。。。

js引擎: 吵啥子吵,先給你個undefined,吃這個吧 

于是:



a(全局):只要心中有夢想,undefined也是嚼勁十足!
js引擎: 等號右邊有一個 0 ,我把它給你吧。
a(全局):謝謝引擎大哥。



同樣的,test 變量 也吃上了飯。



a(局部) : 大哥,我別這么偏袒全局作用域啊,同樣是 a 變量,我也要吃飯?。?br>js引擎:你在函數(shù)內(nèi)部,我還沒執(zhí)行函數(shù)呢,怎么給你吃飯呀,先給你個undefined吧。
a(局部) :可是我旁邊有一個100啊。
js引擎:我剛才不是說了嗎,我還沒執(zhí)行你呢,別挑了,有個undefined啃啃也不錯了。


0.00000004 毫秒的時候
test();

js引擎:我要開始執(zhí)行test函數(shù)了。

alert(a);

js引擎:作用域在嗎,我知道alert是一個內(nèi)置函數(shù),當我在執(zhí)行它的時候,發(fā)現(xiàn)有一個a變量作為參數(shù)傳進去了,你見過它么?

作用域:有啊,就那個剛才還吵著要吃飯的家伙。

js引擎:哦,我想起來了,現(xiàn)在它估計還在啃undefined呢,行吧,你把它給我吧,alert方法點名要找他呢。

作用域:OK。


故事到這里就講完了,現(xiàn)在你應該明白為什么第三題的答案是undefined了吧。

附加題:

var a = 0;function test(){
   alert(a);    if(false){        var a = 100;
   }
}
test();

A. 0
B. 100
C. undefined


別猶豫,大聲說出你的答案吧!

可以將答案寫在評論中哦!


微信群『我們是前端』

后臺回復“入群”即可受邀哦(備注:前端)


長按識別二維碼關(guān)注我們吧
有趣 | 有料 | 有內(nèi)涵
為您提供最優(yōu)質(zhì)的內(nèi)容


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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多