摘要:總結(jié)本博文通過(guò)介紹執(zhí)行上下文和作用域的異同的使用以及變量對(duì)象,讓我們加深對(duì)語(yǔ)言特性的理解。首先,我們介紹了執(zhí)行上下文和的的關(guān)系,并且執(zhí)行上下文是具有對(duì)象的然后,介紹了作用域使變量在作用域范圍內(nèi)可見(jiàn),并且作用域是基于函數(shù)的。
接上一篇Javascript Context和Scope的學(xué)習(xí)總結(jié)01【轉(zhuǎn)自cnblogs的JKhuang】(可能是segmentfault對(duì)單篇文章發(fā)布字?jǐn)?shù)有限制,也沒(méi)有提示,繼續(xù)編輯chrome就會(huì)崩潰)
使用作用域解決上下文問(wèn)題
接下來(lái),繼續(xù)看一個(gè)例子,我們要在函數(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()不能獲取對(duì)象執(zhí)行上下文。
我們知道在方法m()中可以獲取對(duì)象執(zhí)行上下文,所以可以通過(guò)臨時(shí)變量引用this指向的對(duì)象,實(shí)例代碼如下:
/** * 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();
上面,我們通過(guò)臨時(shí)變量self保存了this的引用,由于setTimeout()函數(shù)可以獲取m()的作用域,所用我們可以通過(guò)self. onTimeout()的方式調(diào)用onTimeout()方法。
總結(jié)
本博文通過(guò)介紹執(zhí)行上下文和作用域的異同、this的使用以及變量對(duì)象,讓我們加深對(duì)Javascript 語(yǔ)言特性的理解。
首先,我們介紹了執(zhí)行上下文和this的的關(guān)系,并且執(zhí)行上下文是具有對(duì)象的;然后,介紹了作用域使變量在作用域范圍內(nèi)可見(jiàn),并且作用域是基于函數(shù)的。
我們通過(guò)具體的例子介紹了在不同的作用域和執(zhí)行上下文中,對(duì)this和變量的影響加深了作用域和執(zhí)行上下文的理解,從而幫助我們更好的閱讀和編寫(xiě)代碼。
參考
http://blog.goddyzhao.me/post...
http://clubajax.org/javascrip...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/88097.html
摘要:正文執(zhí)行環(huán)境也稱(chēng)為環(huán)境是中最為重要的一個(gè)概念。執(zhí)行環(huán)境定義了變量或函數(shù)有權(quán)訪問(wèn)的其他數(shù)據(jù),決定了它們各自的行為。簡(jiǎn)而言之,執(zhí)行環(huán)境是基于對(duì)象的,而作用域是基于函數(shù)的。 前述 在我們學(xué)習(xí)Javascript過(guò)程中,常常會(huì)遇到作用域(Scope)和執(zhí)行上下文(Context)等概念。其中,執(zhí)行上下文與this關(guān)鍵字的關(guān)系密切。 有面向?qū)ο缶幊探?jīng)驗(yàn)的各位,對(duì)于this關(guān)鍵字再熟悉不過(guò)了,因此...
摘要:發(fā)生這種情況的條件是當(dāng)引用類(lèi)型值的對(duì)象恰好為活躍對(duì)象。總結(jié)本文介紹中的使用,更重要的是幫助我們能更好地理解值在全局函數(shù)構(gòu)造函數(shù)以及一些特例的情況中值的變化。然而,由于對(duì)于來(lái)說(shuō)沒(méi)有任何意義,因此會(huì)隱式轉(zhuǎn)換為全局對(duì)象。 接上一篇Javascript this 的一些學(xué)習(xí)總結(jié)02【轉(zhuǎn)自cnblogs的JKhuang】 引用類(lèi)型以及this的null值 對(duì)于前面提及的情形,還有例外的情況,當(dāng)調(diào)...
摘要:函數(shù)上下文中的值是函數(shù)調(diào)用者提供并且由當(dāng)前調(diào)用表達(dá)式的形式而定的。然而,由于對(duì)于來(lái)說(shuō)沒(méi)有任何意義,因此會(huì)隱式轉(zhuǎn)換為全局對(duì)象。這里注意到四個(gè)表達(dá)式中,只有第一個(gè)表達(dá)式是指向?qū)ο蟮?,而其他三個(gè)表達(dá)式則執(zhí)行。 摘要 相信有C++、C#或Java等編程經(jīng)驗(yàn)的各位,對(duì)于this關(guān)鍵字再熟悉不過(guò)了。由于Javascript是一種面向?qū)ο蟮木幊陶Z(yǔ)言,它和C++、C#或Java一樣都包含this關(guān)鍵字...
摘要:正式由于作用域鏈的這種關(guān)系,我們就不難理解,為什么和不能通過(guò)作用域鏈向上搜索,因?yàn)閷?duì)和的搜索在當(dāng)前執(zhí)行函數(shù)的活動(dòng)對(duì)象就停止了。 對(duì)于Javascript程序員來(lái)說(shuō),閉包總會(huì)讓你覺(jué)得既熟悉又陌生,然而它對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)卻非常重要,javascript里的許多設(shè)計(jì)模式中都用到了閉包,此處以函數(shù)作用域?yàn)槔?//示例代碼 var a=1; function foo(){ ...
摘要:此時(shí)的作用域鏈包含了兩個(gè)對(duì)象的活動(dòng)對(duì)象和對(duì)象。閉包的應(yīng)用場(chǎng)景保護(hù)函數(shù)內(nèi)的變量安全。依然如前例,由于閉包,函數(shù)中的一直存在于內(nèi)存中,因此每次執(zhí)行,都會(huì)給自加。 引子 JS的閉包一直是很多人不理解,也是在使用過(guò)程中經(jīng)常出現(xiàn)問(wèn)題的地方。每次看文章都會(huì)有所了解閉包,但是,用起來(lái)還是不對(duì),而且錯(cuò)誤百出,其關(guān)鍵問(wèn)題還是出在對(duì)其不理解,不了解。此文章會(huì)不定期更新以及完善,希望在我學(xué)習(xí)的時(shí)候,讓大家也...
閱讀 1684·2021-11-23 09:51
閱讀 3697·2021-09-26 09:46
閱讀 2198·2021-09-22 10:02
閱讀 1997·2019-08-30 15:56
閱讀 3394·2019-08-30 12:51
閱讀 2286·2019-08-30 11:12
閱讀 2121·2019-08-29 13:23
閱讀 2380·2019-08-29 13:16