亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

讀書(shū)筆記(you don't know js): this的理解(沒(méi)寫(xiě)完...)

freewolf / 870人閱讀

摘要:基本概念首先,函數(shù)不能存儲(chǔ)的值,指向哪里,取決于調(diào)用它的對(duì)象。如果沒(méi)有這個(gè)對(duì)象,那默認(rèn)就是調(diào)用非嚴(yán)格模式下。也就是說(shuō)是在運(yùn)行的時(shí)候定義的,不是在綁定的時(shí)候定義的。

基本概念

首先,函數(shù)不能存儲(chǔ)this的值,this指向哪里,取決于調(diào)用它的對(duì)象。如果沒(méi)有這個(gè)對(duì)象,那默認(rèn)就是window調(diào)用(非嚴(yán)格模式下)。也就是說(shuō)this是在運(yùn)行的時(shí)候定義的,不是在綁定的時(shí)候定義的。

    function foo(num) {
        console.log("foo: " + num);
        this.count++
    }
    foo.count = 0;
    for(var i = 0; i < 10; i++) {
        foo(i);
    }
    console.log(foo.count) //輸出是0,因?yàn)檎{(diào)
    console.log(window.count) // 輸出是NAN, 因?yàn)閣indow.count沒(méi)有初始值

再貼一段代碼

    function foo() {
        var a = 2;
        this.bar();
    }
    function bar() {
        console.log( this.a );
    }
    window.a = 3;
    foo();//輸出3,這個(gè)時(shí)候,是window.foo,因?yàn)閎ar也是由window調(diào)用
隱式綁定的問(wèn)題

先看一個(gè)例子

    function foo() {
        console.log(this.a)
    }
    
    var obj = {
        foo: foo,
        a: 2
     }
     var bar = obj.foo();// 函數(shù)別名
     var a = "opps, global";
     obj.foo();// 輸出2
     bar();// 輸出opps, global,調(diào)用bar的是window

這個(gè)情況比較容易導(dǎo)致我們?cè)趥骰卣{(diào)函數(shù)的時(shí)候,出現(xiàn)this指向問(wèn)題

    function foo() {
        console.log(this.a);
    }
    function doFoo(fn) {
        fn();
    }
    
    var obj = {
        a: 2,
        foo: foo
    }
    
    var a = "oops, global";
    doFoo(obj.foo); // 傳遞了一個(gè)函數(shù)過(guò)去,這個(gè)函數(shù)由window調(diào)用,所以最后輸出的是"opps, global"

當(dāng)然我們可以很簡(jiǎn)單地用一個(gè)bind來(lái)解決問(wèn)題

    doFoo(obj.foo.bind(obj) 
顯示綁定(未完待續(xù))

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

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

相關(guān)文章

  • You Don&#039;t Know JS》閱讀理解——this

    摘要:運(yùn)行規(guī)則根據(jù)的運(yùn)作原理,我們可以看到,的值和調(diào)用棧通過(guò)哪些函數(shù)的調(diào)用運(yùn)行到調(diào)用當(dāng)前函數(shù)的過(guò)程以及如何被調(diào)用有關(guān)。 1. this的誕生 假設(shè)我們有一個(gè)speak函數(shù),通過(guò)this的運(yùn)行機(jī)制,當(dāng)使用不同的方法調(diào)用它時(shí),我們可以靈活的輸出不同的name。 var me = {name: me}; function speak() { console.log(this.name); }...

    tianren124 評(píng)論0 收藏0
  • You Don&#039;t Know JS》閱讀理解——作用域

    摘要:在我們的程序中有很多變量標(biāo)識(shí)符,我們現(xiàn)在或者將來(lái)將使用它。當(dāng)我們使用時(shí),如果并沒(méi)有找到這個(gè)變量,在非嚴(yán)格模式下,程序會(huì)默認(rèn)幫我們?cè)谌謩?chuàng)建一個(gè)變量。詞法作用域也就是說(shuō),變量的作用域就是他聲明的時(shí)候的作用域。 作用域 定義 首先我們來(lái)想想作用域是用來(lái)干什么的。在我們的程序中有很多變量(標(biāo)識(shí)符identifier),我們現(xiàn)在或者將來(lái)將使用它。那么多變量,我咋知道我有沒(méi)有聲明或者定義過(guò)他呢,...

    codeKK 評(píng)論0 收藏0
  • You Don&#039;t Know Js 閱讀筆記

    摘要:回調(diào)傳遞函數(shù)是將函數(shù)當(dāng)做值并作為參數(shù)傳遞給函數(shù)。這個(gè)例子中就是因?yàn)槭录壎C(jī)制中的傳入了回調(diào)函數(shù),產(chǎn)生了閉包,引用著所在的作用域,所以此處的數(shù)據(jù)無(wú)法從內(nèi)存中釋放。 javascript作用域 一門語(yǔ)言需要一套設(shè)計(jì)良好的規(guī)則來(lái)存儲(chǔ)變量,并且之后可以方便的找到這些變量,這逃規(guī)則被稱為作用域。 這也意味著當(dāng)我們?cè)L問(wèn)一個(gè)變量的時(shí)候,決定這個(gè)變量能否訪問(wèn)到的依據(jù)就是這個(gè)作用域。 一、詞法作用域 ...

    wanglu1209 評(píng)論0 收藏0
  • [翻譯]You Don&#039;t Know JS: this & Object Prot

    摘要:引用是從匿名函數(shù)內(nèi)部引用自身的唯一方法,不過(guò),最好的方法是避免使用匿名函數(shù),至少在那些需要引用自身的時(shí)候,使用命名函數(shù)或者表達(dá)式。 [翻譯]Chapter1 this or that 第一次翻譯,翻譯的不好,已經(jīng)再盡全力s去翻譯了,如果哪里看不明點(diǎn),請(qǐng)出門左轉(zhuǎn)下邊原文地址 英文原文點(diǎn)擊這里 javascript中最令人困惑的東西就是this關(guān)鍵字,它在每個(gè)函數(shù)作用域中都會(huì)自動(dòng)定義的一個(gè)...

    mingzhong 評(píng)論0 收藏0
  • You don&#039;t know cross-origin

    摘要:為什么會(huì)存在跨域問(wèn)題同源策略由于出于安全考慮,瀏覽器規(guī)定不能操作其他域下的頁(yè)面,不能接受其他域下的請(qǐng)求不只是,引用非同域下的字體文件,還有引用非同域下的圖片,也被同源策略所約束只要協(xié)議域名端口有一者不同,就被視為非同域。 showImg(https://segmentfault.com/img/remote/1460000017093859?w=1115&h=366); Why 為什么...

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

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

0條評(píng)論

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