成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

一個(gè)小小的JavaScript題目

zzbo / 443人閱讀

摘要:先解釋一下第三個(gè),這個(gè)也很簡(jiǎn)單,因?yàn)橛昧怂詫?shí)際匹配了顯示綁定,所以當(dāng)前綁定了那么輸出的肯定是??梢娔悴恢赖倪@本書說(shuō)的很對(duì),之所以會(huì)在出現(xiàn)箭頭函數(shù),實(shí)質(zhì)就像用詞法作用域代替因?yàn)檫@個(gè)真的特別特別容易誤用和讓人誤解。

 今天前Leader在下班前發(fā)給我一道JavaScript的題目,看到感覺很不錯(cuò),而且我開始的時(shí)候確實(shí)也理解錯(cuò)了,覺得有必要拿出來(lái)講講,并且為此我也做錯(cuò)了地鐵,哈哈哈~
  題目是這樣的:

var length = 10;
function fn() {
    console.log(this.length)
};
var obj = {
    length: 5, 
    method: function (fn) {
        fn();
        arguments[0]();
        fn.call(obj, 12);
    }
};
obj.method(fn, 1);

  請(qǐng)問(wèn)輸出是什么,當(dāng)時(shí)那手機(jī)看的時(shí)候給出了答案

10 10 5

  實(shí)際上并不是如此,答案是:

10 2 5

  仔細(xì)分析了一下才知道原因,首先介紹一下四種this的類型:

默認(rèn)綁定

隱式綁定

顯示綁定

new綁定

其中,默認(rèn)綁定就是什么都匹配不到的情況下,非嚴(yán)格模式this綁定到全局對(duì)象window或者global,嚴(yán)格模式綁定到undefined;隱式綁定就是函數(shù)作為對(duì)象的屬性,通過(guò)對(duì)象屬性的方式調(diào)用,這個(gè)時(shí)候this綁定到對(duì)象;顯示綁定就是通過(guò)applycall調(diào)用的方式;new綁定就是通過(guò)new操作符時(shí)將this綁定到當(dāng)前新創(chuàng)建的對(duì)象中,它們的匹配有限是是從小到大的。
  那么現(xiàn)在來(lái)解釋一下:

obj.method(fn, 1);

  上述執(zhí)行其實(shí)對(duì)應(yīng)的是下面三條語(yǔ)句:

fn(); 
arguments[0]();
fn.call(obj, 12);

  通過(guò)將函數(shù)賦值給函數(shù)參數(shù)(fn),然后調(diào)用fn,這個(gè)時(shí)候能匹配到的this類型就是第一條默認(rèn)綁定,因?yàn)閷?shí)在非嚴(yán)格模式下,所以this綁定的是window,當(dāng)然首先輸出的是10。
  先解釋一下第三個(gè),這個(gè)也很簡(jiǎn)單,因?yàn)橛昧?b>call,所以實(shí)際匹配了顯示綁定,所以當(dāng)前this綁定了obj,那么輸出的肯定是2。
  下面著重解釋一下第二個(gè),這個(gè)我當(dāng)時(shí)理解成和第一次完全一樣,但實(shí)際并不是的,其實(shí)在JavaScript中數(shù)組算是一種特殊的對(duì)象(關(guān)于JavaScript對(duì)象的部分,我現(xiàn)在還在寫,下一篇就會(huì)出的),arguments[0]其實(shí)就是通過(guò)對(duì)象的屬性去調(diào)用(數(shù)組的默認(rèn)屬性類型是數(shù)值而普通對(duì)象的屬性類型是字符串),那么現(xiàn)在其實(shí)運(yùn)用的是規(guī)則2,this被綁定到arguments上,而arguments確實(shí)存在一個(gè)length屬性,并且值為2(這個(gè)別告訴我你看不出來(lái)),所以輸出的肯定就是2啦。
  可見《你不知道的JavaScript》這本書說(shuō)的很對(duì),之所以會(huì)在ES6出現(xiàn)箭頭函數(shù),實(shí)質(zhì)就像用詞法作用域代替this,因?yàn)檫@個(gè)真的特別特別容易誤用和讓人誤解。
  歡迎大家到我的個(gè)人博客看看,https://mrerhu.github.io ?

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/86725.html

相關(guān)文章

  • 一道小小題目引發(fā)對(duì)javascript支持正則表達(dá)式相關(guān)方法探討

    摘要:返回值返回值根據(jù)傳入的參數(shù)類型和規(guī)則的不同,返回的內(nèi)容不同,但總體來(lái)說(shuō),它是返回一個(gè)對(duì)象,而不是索引,如果沒匹配到任何符合條件的字符串,則返回。 本文發(fā)布在我的博客一道小小的題目引發(fā)對(duì)javascript支持正則表達(dá)式相關(guān)方法的探討許可協(xié)議: 署名-非商業(yè)性使用-禁止演繹 4.0 國(guó)際 轉(zhuǎn)載請(qǐng)保留原文鏈接及作者。 以前對(duì)于正則是非常懼怕的,因?yàn)榭床欢蛯W(xué)不會(huì)。但最近項(xiàng)目中頻繁的...

    Scholer 評(píng)論0 收藏0
  • 從一道面試題談?wù)労瘮?shù)柯里化(Currying)

    摘要:忍者秘籍一書中,對(duì)于柯里化的定義如下在一個(gè)函數(shù)中首先填充幾個(gè)參數(shù)然后再返回一個(gè)新函數(shù)的技術(shù)稱為柯里化?;氐轿覀兊念}目本身,其實(shí)根據(jù)測(cè)試用例我們可以發(fā)現(xiàn),函數(shù)的要求就是接受單一函數(shù),例如但是與柯里化不同之處在于,柯里化返回的一個(gè)新函數(shù)。   歡迎大家再一次來(lái)到我的文章專欄:從面試題中我們能學(xué)到什么,各位同行小伙伴是否已經(jīng)開始了悠閑的春節(jié)假期呢?在這里提前祝大家雞年大吉吧~哈哈,之前有人說(shuō)...

    cppprimer 評(píng)論0 收藏0
  • 前端經(jīng)典文章

    摘要:上周末看這篇文章時(shí),偶有靈光,所以,分享出來(lái)給大家一起看看前端面試四月二十家前端面試題分享請(qǐng)各位讀者添加一下作者的微信公眾號(hào),以后有新的文章,將在微信公眾號(hào)直接推送給各位,非常感謝。 前端切圖神器 avocode 有了這個(gè)神器,切圖再也腰不酸,腿不疼了。 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果讀完本文還不懂,...

    lowett 評(píng)論0 收藏0
  • 前端系列——查找字符串B字符任意一種組合是否是字符串A子串

    摘要:例如,,則的其中一種組合是的子串,然后返回。如果從題目給出的例子來(lái)窮舉,一共種組合,很容易窮舉出來(lái),但是字符串長(zhǎng)度非常大的時(shí)候,怎么辦呢所以,窮舉的辦法被我排除了。 題目要求 這道算法題在前端面試中可能遇到,據(jù)說(shuō)某條出過(guò)這題。 查找字符串B的字符任意一種組合是否是字符串A的子串。例如 A=abc123,B=cba,則B的其中一種組合abc是A的子串,然后返回true。 算法思路 題目的...

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

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

0條評(píng)論

閱讀需要支付1元查看
<