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

資訊專欄INFORMATION COLUMN

Javascript Context和Scope的學(xué)習(xí)總結(jié)02【轉(zhuǎn)自cnblogs的JKhuang】

Aldous / 1191人閱讀

摘要:總結(jié)本博文通過介紹執(zhí)行上下文和作用域的異同的使用以及變量對象,讓我們加深對語言特性的理解。首先,我們介紹了執(zhí)行上下文和的的關(guān)系,并且執(zhí)行上下文是具有對象的然后,介紹了作用域使變量在作用域范圍內(nèi)可見,并且作用域是基于函數(shù)的。

接上一篇Javascript Context和Scope的學(xué)習(xí)總結(jié)01【轉(zhuǎn)自cnblogs的JKhuang】(可能是segmentfault對單篇文章發(fā)布字?jǐn)?shù)有限制,也沒有提示,繼續(xù)編輯chrome就會崩潰)

使用作用域解決上下文問題

接下來,繼續(xù)看一個例子,我們要在函數(shù)setTimeout()中調(diào)用方法onTimeout(),具體定義如下:

/**
 * setTimeout function with Broken Context issue
 * @type {Object}
 */
var o = {
    x:23,
    onTimeout: function(){
        console.log("x:", this.x);
    },
    m: function(){
        setTimeout(function(){
            this.onTimeout(); // ERROR: this.onTimeout is not a function
        }, 1);
    }
}
o.m();

同樣在函數(shù)setTimeout()中調(diào)用方法onTimeout()失敗,我們知道這是由于方法onTimeout()不能獲取對象執(zhí)行上下文。

我們知道在方法m()中可以獲取對象執(zhí)行上下文,所以可以通過臨時變量引用this指向的對象,實例代碼如下:

/**
 * Fixs setTimeout function with Broken Context issue.
 * @type {Object}
 */
var o = {
    x:23,
    onTimeout: function(){
        console.log("x:", this.x); // outputs 23
    },
    m: function(){
        
        // Keeps instance reference.
        var self = this;
        setTimeout(function(){
           // Gets m scrope. 
            self.onTimeout();
        }, 1);
    }
}
o.m();

上面,我們通過臨時變量self保存了this的引用,由于setTimeout()函數(shù)可以獲取m()的作用域,所用我們可以通過self. onTimeout()的方式調(diào)用onTimeout()方法。

總結(jié)

本博文通過介紹執(zhí)行上下文和作用域的異同、this的使用以及變量對象,讓我們加深對Javascript 語言特性的理解。

首先,我們介紹了執(zhí)行上下文和this的的關(guān)系,并且執(zhí)行上下文是具有對象的;然后,介紹了作用域使變量在作用域范圍內(nèi)可見,并且作用域是基于函數(shù)的。

我們通過具體的例子介紹了在不同的作用域和執(zhí)行上下文中,對this和變量的影響加深了作用域和執(zhí)行上下文的理解,從而幫助我們更好的閱讀和編寫代碼。

參考

http://blog.goddyzhao.me/post...

http://clubajax.org/javascrip...

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

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

相關(guān)文章

  • Javascript ContextScope學(xué)習(xí)總結(jié)01【轉(zhuǎn)自cnblogsJKhuang

    摘要:正文執(zhí)行環(huán)境也稱為環(huán)境是中最為重要的一個概念。執(zhí)行環(huán)境定義了變量或函數(shù)有權(quán)訪問的其他數(shù)據(jù),決定了它們各自的行為。簡而言之,執(zhí)行環(huán)境是基于對象的,而作用域是基于函數(shù)的。 前述 在我們學(xué)習(xí)Javascript過程中,常常會遇到作用域(Scope)和執(zhí)行上下文(Context)等概念。其中,執(zhí)行上下文與this關(guān)鍵字的關(guān)系密切。 有面向?qū)ο缶幊探?jīng)驗的各位,對于this關(guān)鍵字再熟悉不過了,因此...

    April 評論0 收藏0
  • Javascript this 一些學(xué)習(xí)總結(jié)02轉(zhuǎn)自cnblogsJKhuang

    摘要:發(fā)生這種情況的條件是當(dāng)引用類型值的對象恰好為活躍對象??偨Y(jié)本文介紹中的使用,更重要的是幫助我們能更好地理解值在全局函數(shù)構(gòu)造函數(shù)以及一些特例的情況中值的變化。然而,由于對于來說沒有任何意義,因此會隱式轉(zhuǎn)換為全局對象。 接上一篇Javascript this 的一些學(xué)習(xí)總結(jié)02【轉(zhuǎn)自cnblogs的JKhuang】 引用類型以及this的null值 對于前面提及的情形,還有例外的情況,當(dāng)調(diào)...

    suemi 評論0 收藏0
  • Javascript this 一些學(xué)習(xí)總結(jié)01【轉(zhuǎn)自cnblogsJKhuang

    摘要:函數(shù)上下文中的值是函數(shù)調(diào)用者提供并且由當(dāng)前調(diào)用表達(dá)式的形式而定的。然而,由于對于來說沒有任何意義,因此會隱式轉(zhuǎn)換為全局對象。這里注意到四個表達(dá)式中,只有第一個表達(dá)式是指向?qū)ο蟮?,而其他三個表達(dá)式則執(zhí)行。 摘要 相信有C++、C#或Java等編程經(jīng)驗的各位,對于this關(guān)鍵字再熟悉不過了。由于Javascript是一種面向?qū)ο蟮木幊陶Z言,它和C++、C#或Java一樣都包含this關(guān)鍵字...

    Thanatos 評論0 收藏0
  • javascript作用域,作用域鏈,[[scope]]屬性

    摘要:正式由于作用域鏈的這種關(guān)系,我們就不難理解,為什么和不能通過作用域鏈向上搜索,因為對和的搜索在當(dāng)前執(zhí)行函數(shù)的活動對象就停止了。 對于Javascript程序員來說,閉包總會讓你覺得既熟悉又陌生,然而它對于開發(fā)人員來說卻非常重要,javascript里的許多設(shè)計模式中都用到了閉包,此處以函數(shù)作用域為例。 //示例代碼 var a=1; function foo(){ ...

    pkhope 評論0 收藏0
  • JavaScript閉包

    摘要:此時的作用域鏈包含了兩個對象的活動對象和對象。閉包的應(yīng)用場景保護(hù)函數(shù)內(nèi)的變量安全。依然如前例,由于閉包,函數(shù)中的一直存在于內(nèi)存中,因此每次執(zhí)行,都會給自加。 引子 JS的閉包一直是很多人不理解,也是在使用過程中經(jīng)常出現(xiàn)問題的地方。每次看文章都會有所了解閉包,但是,用起來還是不對,而且錯誤百出,其關(guān)鍵問題還是出在對其不理解,不了解。此文章會不定期更新以及完善,希望在我學(xué)習(xí)的時候,讓大家也...

    Tony 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<