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