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

資訊專欄INFORMATION COLUMN

JavaScript中函數(shù)的上下文——this

curried / 1360人閱讀

摘要:上下文初步了解我們來研究一下函數(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.函數(shù)上下文遵循五個規(guī)律

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

相關(guān)文章

  • 深入理解JavaScript執(zhí)行下文和執(zhí)行棧

    摘要:執(zhí)行上下文和執(zhí)行棧是中關(guān)鍵概念之一,是難點之一。理解執(zhí)行上下文和執(zhí)行棧同樣有助于理解其他的概念如提升機制作用域和閉包等。函數(shù)執(zhí)行完成,函數(shù)的執(zhí)行上下文出棧,并且被銷毀。 前言 如果你是一名 JavaScript 開發(fā)者,或者想要成為一名 JavaScript 開發(fā)者,那么你必須知道 JavaScript 程序內(nèi)部的執(zhí)行機制。執(zhí)行上下文和執(zhí)行棧是JavaScript中關(guān)鍵概念之一,是Ja...

    silenceboy 評論0 收藏0
  • 深入理解JavaScript執(zhí)行下文和執(zhí)行棧

    摘要:執(zhí)行上下文和執(zhí)行棧是中關(guān)鍵概念之一,是難點之一。理解執(zhí)行上下文和執(zhí)行棧同樣有助于理解其他的概念如提升機制作用域和閉包等。函數(shù)執(zhí)行完成,函數(shù)的執(zhí)行上下文出棧,并且被銷毀。 前言 如果你是一名 JavaScript 開發(fā)者,或者想要成為一名 JavaScript 開發(fā)者,那么你必須知道 JavaScript 程序內(nèi)部的執(zhí)行機制。執(zhí)行上下文和執(zhí)行棧是JavaScript中關(guān)鍵概念之一,是Ja...

    leiyi 評論0 收藏0
  • 理解JavaScript核心知識點:This

    摘要:關(guān)鍵字計算為當(dāng)前執(zhí)行上下文的屬性的值。毫無疑問它將指向了這個前置的對象。構(gòu)造函數(shù)也是同理。嚴(yán)格模式無論調(diào)用位置,只取顯式給定的上下文綁定的,通過方法傳入的第一參數(shù),否則是。其實并不屬于特殊規(guī)則,是由于各種事件監(jiān)聽定義方式本身造成的。 this 是 JavaScript 中非常重要且使用最廣的一個關(guān)鍵字,它的值指向了一個對象的引用。這個引用的結(jié)果非常容易引起開發(fā)者的誤判,所以必須對這個關(guān)...

    TerryCai 評論0 收藏0
  • 如何理解JavaScriptthis關(guān)鍵字

    摘要:原文鏈接參考深入理解原型和閉包完結(jié)王福朋博客園中的作用域詳解博客園 前言 王福朋老師的 JavaScript原型和閉包系列 文章看了不下三遍了,最為一個初學(xué)者,每次看的時候都會有一種 大徹大悟 的感覺,而看完之后卻總是一臉懵逼。原型與閉包 可以說是 JavaScirpt 中理解起來最難的部分了,當(dāng)然,我也只是了解到了一些皮毛,對于 JavaScript OOP 更是缺乏經(jīng)驗。這里我想總...

    Yangder 評論0 收藏0
  • JavaScript this 講解

    摘要:作為方法進行調(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)部對...

    zhangwang 評論0 收藏0
  • 理解 JavaScript this 關(guān)鍵字

    摘要:原文許多人被中的關(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)鍵字給困擾住了,我想混亂的...

    jayzou 評論0 收藏0

發(fā)表評論

0條評論

curried

|高級講師

TA的文章

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