成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js的一道經(jīng)典題

wemallshop / 963人閱讀

摘要:它的特性是先進(jìn)后出。執(zhí)行第一行代碼該行代碼執(zhí)行后會(huì)變成這樣。對(duì)于來說,點(diǎn)運(yùn)算級(jí)最高,所以先進(jìn)行計(jì)算表達(dá)式的值。如果先運(yùn)算的話,就證明了優(yōu)先級(jí)高于點(diǎn)號(hào),與規(guī)范不和。最后一個(gè)問題同理倒數(shù)第二個(gè)。謝謝李衛(wèi)的提醒。

    function Foo(){
        getName = function () {alert(1);}
        return this;
    }
    Foo.getName = function() {alert(2);};
    Foo.prototype.getName = function(){alert(3);};
    var getName = function(){alert(4);};
    function getName(){alert(5)};

    Foo.getName();
    getName();
    Foo().getName();
    getName();
    new Foo.getName();
    new Foo().getName();    
    new new Foo().getName();
    2 ----Foo.getName();
    4 ----getName();
    1 ----Foo().getName();
    1 ----getName();
    2 ----new Foo.getName();
    3 ----new Foo().getName();
    3 ----new new Foo().getName();
概念

為了閱讀效益最大化,請(qǐng)先了解執(zhí)行環(huán)境變量對(duì)象文字性概念。

執(zhí)行環(huán)境挺常見的,它是長這樣的。它的特性是先進(jìn)后出(stack)。

上述圖片是來源于代碼執(zhí)行到Foo( ).getName( )。

(anonymous function) 其實(shí)就是global context

表示方法:

    ECStack = [
        functionContext(Foo),    /*這不是函數(shù)*/
        GlobalContext    
    ]

變量對(duì)象也挺常見,在Chrome中長這樣。

表示方法通常是:

//以上述代碼尚未執(zhí)行時(shí)為例
    VO = {    
        Foo: {
            ,
            return this
        }
        getName: 
    }
分析

代碼執(zhí)行有兩個(gè)階段

進(jìn)入環(huán)境(代碼未執(zhí)行,已編譯)

代碼執(zhí)行

現(xiàn)在一起來看看每一行代碼的執(zhí)行

上述代碼未執(zhí)行時(shí),變量對(duì)象是這樣的。

    VO = {
        Foo: {
            ,
            return this
        }
        getName: 
    }
執(zhí)行"第一行"代碼

該行代碼執(zhí)行后VO會(huì)變成這樣。

    VO = {
        Foo: { 
            ,
            getName: 
    }

VO的Foo圖示是這樣的

執(zhí)行"第二行"代碼

該行代碼執(zhí)行后VO會(huì)變成這樣。

    VO = {
        Foo: { 
            ,
            getName: 
    }

VO的Foo圖示是這樣

執(zhí)行"第三行"代碼


該行代碼執(zhí)行后VO會(huì)變成這樣。

    VO = {
        Foo: { 
            ,
            getName: 
    }
執(zhí)行"第四行"代碼(第一問)


直接去VO里尋找結(jié)果發(fā)現(xiàn)alert 2。

執(zhí)行"第五行"代碼(第二問)

getName() //等于
window.getName();

同樣直接在VO里可以直接找到答案 alert 4。

執(zhí)行"第六行"代碼(第三問)


這里比上述多了一個(gè)函數(shù)調(diào)用,F(xiàn)oo()調(diào)用返回this(指向window),所以此時(shí)

Foo().getName(); //等于
window.getName()

同時(shí)注意:
由于Foo()調(diào)用,導(dǎo)致VO發(fā)生了變化。最后alert 1.

    VO = {
        Foo: { 
            ,
            getName: 
    }
執(zhí)行"第七行"代碼(第四問)

結(jié)果同上

執(zhí)行"最后三行"代碼(第五、六、七問)

最后三問考察了new、屬性訪問符、及函數(shù)調(diào)用優(yōu)先順序和new運(yùn)算符的作用。

優(yōu)先順序參考如下,或點(diǎn)這

無論是用哪種屬性訪問表達(dá)式,在"."和"[]"之前的表達(dá)式總是會(huì)先計(jì)算的。

對(duì)于new Foo.getName()來說,點(diǎn)運(yùn)算級(jí)最高,所以先進(jìn)行計(jì)算表達(dá)式Foo的值。如果先運(yùn)算new的話,就證明了new優(yōu)先級(jí)高于點(diǎn)號(hào),與規(guī)范不和。

而對(duì)于new Foo().getName()來說,F(xiàn)oo()與new Foo()相比,new優(yōu)先級(jí)更高,所以先算new Foo(),new出來的新對(duì)象繼承了Foo.prototype屬性,因此新對(duì)象訪問getName時(shí)會(huì)彈出3.

此處要明白new的作用

創(chuàng)建新的空對(duì)象

將新對(duì)象繼承構(gòu)造函數(shù)的prototype屬性,并調(diào)用構(gòu)造函數(shù)初始化

將構(gòu)造函數(shù)的this指針指向新建對(duì)象。

最后一個(gè)問題同理倒數(shù)第二個(gè)。

謝謝ID:李衛(wèi)的提醒。

原題和分析鏈接

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78728.html

相關(guān)文章

  • 前端計(jì)劃——一道經(jīng)典JavaScript問(含閉包、事件輪詢、作用域等概念解釋)

    摘要:作用域和作用域鏈關(guān)于作用域這里不做過多解釋,中根據(jù)作用域可分為全局變量和局部變量。好吧,不是這部分核心,核心是解釋的單線程和事件輪詢機(jī)制。這部分就涉及到閉包的理解了。 前言:這是一道很經(jīng)典的Js面試題,涉及到閉包、變量作用域、setTimeout等知識(shí),對(duì)于深入理解這些內(nèi)容很有幫助 題目描述 //問題描述:請(qǐng)寫出最終的輸出值,并解釋原因 var value1 = 0, value2 ...

    EdwardUp 評(píng)論0 收藏0
  • 一道圖解JavaScript作用域

    摘要:當(dāng)我將此題的作用域鏈畫出來之后,終于感覺作用域入門了。創(chuàng)建函數(shù)的作用域鏈,并初始化為函數(shù)的所包含的對(duì)象,即包含了的作用域鏈。 作用域 為了理解作用域,跪看了好幾篇大神的博文,終于略知一二。 1.題目 其中,看到這樣一道題(稍作修改): function factory() { var name = laruence; var intro = function(){...

    nevermind 評(píng)論0 收藏0
  • 一道js閉包面試學(xué)習(xí)

    摘要:然后最外層這個(gè)函數(shù)會(huì)返回一個(gè)新對(duì)象,對(duì)象里面有一個(gè)屬性,名為,而這個(gè)屬性的值是一個(gè)匿名函數(shù),它會(huì)返回。 最近看到一條有意思的閉包面試題,但是看到原文的解析,我自己覺得有點(diǎn)迷糊,所以自己重新做一下這條題目。 閉包面試題原題 function fun(n, o) { // ① console.log(o); return { // ② fun: function(m) ...

    plus2047 評(píng)論0 收藏0
  • 由淺入深前端面試 和矯情“浪漫主義”詩句

    摘要:好吧,我承認(rèn)太標(biāo)題黨了,這篇文章是通過一道前端面試題引出的純技術(shù)討論。我先要矯情無比的從中外詩歌說起。這一星期陸陸續(xù)續(xù)面試了不少于個(gè)人,其中不乏工作履歷突出的候選者。這樣做的問題在于循環(huán)并沒有要求枚舉對(duì)象的修改與當(dāng)前循環(huán)保持一致。 好吧,我承認(rèn)太標(biāo)題黨了,這篇文章是通過一道前端面試題引出的純技術(shù)討論。我先要矯情無比的從中外詩歌說起。 傳統(tǒng)的佛學(xué)經(jīng)典里,被世人熟知的有這樣一句話:一花一世...

    JerryZou 評(píng)論0 收藏0
  • 由淺入深前端面試 和矯情“浪漫主義”詩句

    摘要:好吧,我承認(rèn)太標(biāo)題黨了,這篇文章是通過一道前端面試題引出的純技術(shù)討論。我先要矯情無比的從中外詩歌說起。這一星期陸陸續(xù)續(xù)面試了不少于個(gè)人,其中不乏工作履歷突出的候選者。這樣做的問題在于循環(huán)并沒有要求枚舉對(duì)象的修改與當(dāng)前循環(huán)保持一致。 好吧,我承認(rèn)太標(biāo)題黨了,這篇文章是通過一道前端面試題引出的純技術(shù)討論。我先要矯情無比的從中外詩歌說起。 傳統(tǒng)的佛學(xué)經(jīng)典里,被世人熟知的有這樣一句話:一花一世...

    lk20150415 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<