摘要:上下文初步了解我們來(lái)研究一下函數(shù)的上下文,所謂的上下文就是指函數(shù)里面的是誰(shuí)。即函數(shù)內(nèi)部的指向。瀏覽器運(yùn)行結(jié)果因?yàn)閳A括號(hào)調(diào)用函數(shù),上下文是對(duì)象。此時(shí)點(diǎn)擊誰(shuí),就是誰(shuí)定時(shí)器調(diào)用函數(shù),上下文是對(duì)象函數(shù)函數(shù)被定時(shí)器調(diào)用,此時(shí)函數(shù)的上下文就是對(duì)象。
1.上下文初步了解:
我們來(lái)研究一下函數(shù)的上下文(context),所謂的上下文就是指函數(shù)里面的this是誰(shuí)。
當(dāng)一個(gè)函數(shù)當(dāng)做對(duì)象的方法被調(diào)用的時(shí)候,這個(gè)函數(shù)里面this表示這個(gè)對(duì)象:
現(xiàn)在我們調(diào)用sayHello函數(shù)的時(shí)候,是通過(guò)obj打點(diǎn)調(diào)用的,所以現(xiàn)在這個(gè)sayHello函數(shù)的上下文就是obj對(duì)象。 即sayHello函數(shù)內(nèi)部的this指向obj。
但是,千萬(wàn)不要認(rèn)為寫(xiě)在對(duì)象里面的函數(shù),上下文一定是這個(gè)對(duì)象!!
比如:
瀏覽器運(yùn)行結(jié)果:
因?yàn)閳A括號(hào)調(diào)用函數(shù),上下文是window對(duì)象。
函數(shù)的上下文是什么,取決于函數(shù)怎么調(diào)用,而不是函數(shù)如何定義。
函數(shù)的上下文是函數(shù)的調(diào)用時(shí)表現(xiàn)的性質(zhì),不是函數(shù)定義的時(shí)候?qū)懰赖男再|(zhì)。
2.1函數(shù)用圓括號(hào)調(diào)用,函數(shù)的上下文是window對(duì)象
函數(shù)function fun(){}的上下文是什么呢?不要看它怎么定義,要看它怎么調(diào)用。此時(shí)是fun()函數(shù)名加上圓括號(hào)直接調(diào)用,上下文就是window對(duì)象!
而我們知道:所有的全局變量都是window對(duì)象的屬性,(注意:函數(shù)里面的局部變量,不是window的屬性,不是任何東西的屬性,它就是一個(gè)變量。)程序彈出666。
2.2函數(shù)如果作為一個(gè)對(duì)象的方法,對(duì)象打點(diǎn)調(diào)用,函數(shù)的上下文就是這個(gè)對(duì)象
比如下面的例子,我們把fun函數(shù)定義出來(lái)了,然后又把這個(gè)函數(shù)綁定給了obj對(duì)象的c屬性:
調(diào)用的時(shí)候,是“對(duì)象.函數(shù)()”
此時(shí)根據(jù)規(guī)律,函數(shù)里面的this是這個(gè)對(duì)象。所以能夠彈出1。
2.3函數(shù)是事件處理函數(shù),函數(shù)的上下文就是觸發(fā)這個(gè)事件的對(duì)象
下面我們定義了一個(gè)fun,然后把這個(gè)fun當(dāng)做了3個(gè)DOM元素的事件處理函數(shù):
函數(shù)不會(huì)執(zhí)行,直到用戶點(diǎn)擊了某一個(gè)div標(biāo)簽。此時(shí)點(diǎn)擊誰(shuí),this就是誰(shuí)!
2.4定時(shí)器調(diào)用函數(shù),上下文是window對(duì)象
函數(shù)fun被定時(shí)器調(diào)用,此時(shí)函數(shù)的上下文就是window對(duì)象。每秒鐘能彈出1.
2.5數(shù)組中存放的函數(shù),被數(shù)組索引之后加圓括號(hào)調(diào)用,this就是這個(gè)數(shù)組
比如:
一定要敏感:
arr[0]();
此時(shí)這個(gè)函數(shù)是從數(shù)組中枚舉出來(lái)然后加圓括號(hào)執(zhí)行的,所以最終調(diào)用者可以認(rèn)為是這個(gè)數(shù)組,上下文就是這個(gè)數(shù)組!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/92409.html
摘要:執(zhí)行上下文和執(zhí)行棧是中關(guān)鍵概念之一,是難點(diǎn)之一。理解執(zhí)行上下文和執(zhí)行棧同樣有助于理解其他的概念如提升機(jī)制作用域和閉包等。函數(shù)執(zhí)行完成,函數(shù)的執(zhí)行上下文出棧,并且被銷(xiāo)毀。 前言 如果你是一名 JavaScript 開(kāi)發(fā)者,或者想要成為一名 JavaScript 開(kāi)發(fā)者,那么你必須知道 JavaScript 程序內(nèi)部的執(zhí)行機(jī)制。執(zhí)行上下文和執(zhí)行棧是JavaScript中關(guān)鍵概念之一,是Ja...
摘要:執(zhí)行上下文和執(zhí)行棧是中關(guān)鍵概念之一,是難點(diǎn)之一。理解執(zhí)行上下文和執(zhí)行棧同樣有助于理解其他的概念如提升機(jī)制作用域和閉包等。函數(shù)執(zhí)行完成,函數(shù)的執(zhí)行上下文出棧,并且被銷(xiāo)毀。 前言 如果你是一名 JavaScript 開(kāi)發(fā)者,或者想要成為一名 JavaScript 開(kāi)發(fā)者,那么你必須知道 JavaScript 程序內(nèi)部的執(zhí)行機(jī)制。執(zhí)行上下文和執(zhí)行棧是JavaScript中關(guān)鍵概念之一,是Ja...
摘要:關(guān)鍵字計(jì)算為當(dāng)前執(zhí)行上下文的屬性的值。毫無(wú)疑問(wèn)它將指向了這個(gè)前置的對(duì)象。構(gòu)造函數(shù)也是同理。嚴(yán)格模式無(wú)論調(diào)用位置,只取顯式給定的上下文綁定的,通過(guò)方法傳入的第一參數(shù),否則是。其實(shí)并不屬于特殊規(guī)則,是由于各種事件監(jiān)聽(tīng)定義方式本身造成的。 this 是 JavaScript 中非常重要且使用最廣的一個(gè)關(guān)鍵字,它的值指向了一個(gè)對(duì)象的引用。這個(gè)引用的結(jié)果非常容易引起開(kāi)發(fā)者的誤判,所以必須對(duì)這個(gè)關(guān)...
摘要:原文鏈接參考深入理解原型和閉包完結(jié)王福朋博客園中的作用域詳解博客園 前言 王福朋老師的 JavaScript原型和閉包系列 文章看了不下三遍了,最為一個(gè)初學(xué)者,每次看的時(shí)候都會(huì)有一種 大徹大悟 的感覺(jué),而看完之后卻總是一臉懵逼。原型與閉包 可以說(shuō)是 JavaScirpt 中理解起來(lái)最難的部分了,當(dāng)然,我也只是了解到了一些皮毛,對(duì)于 JavaScript OOP 更是缺乏經(jīng)驗(yàn)。這里我想總...
摘要:作為方法進(jìn)行調(diào)用,該上下文是方法的擁有者作為全局函數(shù)調(diào)用,其上下文永遠(yuǎn)是也就是說(shuō),該函數(shù)是的一個(gè)方法作為構(gòu)造器進(jìn)行調(diào)用時(shí),其上下文對(duì)象則是新創(chuàng)建的對(duì)象實(shí)例。 精確把握 JavaScript 中的 this this 是 JavaScript 中的一個(gè)關(guān)鍵字,當(dāng)一個(gè)函數(shù)被調(diào)用時(shí),除了傳入函數(shù)的顯式參數(shù)以外,名為 this 的隱式參數(shù)也被傳入了函數(shù)。this 參數(shù)指向了一個(gè)自動(dòng)生成的內(nèi)部對(duì)...
摘要:原文許多人被中的關(guān)鍵字給困擾住了,我想混亂的根源來(lái)自人們理所當(dāng)然地認(rèn)為中的應(yīng)該像中的或中的一樣工作。盡管有點(diǎn)難理解,但它的原理并不神秘。在瀏覽器中,全局對(duì)象是對(duì)象。運(yùn)算符創(chuàng)建一個(gè)新對(duì)象并且設(shè)置函數(shù)中的指向調(diào)用函數(shù)的新對(duì)象。 原文:Understanding the this keyword in JavaScript 許多人被JavaScript中的this關(guān)鍵字給困擾住了,我想混亂的...
閱讀 3026·2021-11-22 15:25
閱讀 2346·2021-11-18 10:07
閱讀 1115·2019-08-29 15:29
閱讀 551·2019-08-29 13:25
閱讀 1604·2019-08-29 12:58
閱讀 3281·2019-08-29 12:55
閱讀 2979·2019-08-29 12:28
閱讀 588·2019-08-29 12:16