国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript this綁定過程深入詳解

2024-05-06 15:27:27
字體:
來源:轉載
供稿:網友

本文實例形式詳細分析了JavaScript this綁定過程。分享給大家供大家參考,具體如下:

在理解this 的綁定過程之前,首先要理解調用位置:調用位置就是函數在代碼中被調用的位置(而不是聲明的位置)。只有仔細分析調用位置才能回答這個問題:這個this 到底引用的是什么?通常來說,尋找調用位置就是尋找“函數被調用的位置”,但是做起來并沒有這么簡單,因為某些編程模式可能會隱藏真正的調用位置。最重要的是要分析調用棧(就是為了到達當前執行位置所調用的所有函數)。我們關心的調用位置就在當前正在執行的函數的前一個調用中。

下面我們來看看到底什么是調用棧和調用位置:

function baz() {// 當前調用棧是:baz// 因此,當前調用位置是全局作用域console.log( "baz" );bar(); // <-- bar 的調用位置}function bar() {// 當前調用棧是baz -> bar// 因此,當前調用位置在baz 中console.log( "bar" );foo(); // <-- foo 的調用位置}function foo() {// 當前調用棧是baz -> bar -> foo// 因此,當前調用位置在bar 中console.log( "foo" );}baz(); // <-- baz 的調用位置

注意我們是如何(從調用棧中)分析出真正的調用位置的,因為它決定了this 的綁定。

你可以把調用棧想象成一個函數調用鏈,就像我們在前面代碼段的注釋中所寫的一樣。但是這種方法非常麻煩并且容易出錯。另一個查看調用棧的方法是使用瀏覽器的調試工具。絕大多數現代桌面瀏覽器都內置了開發者工具,其中包含JavaScript 調試器。就本例來說,你可以在工具中給foo() 函數的第一行代碼設置一個斷點,或者直接在第一行代碼之前插入一條debugger;語句。運行代碼時,調試器會在那個位置暫停,同時會展示當前位置的函數調用列表,這就是你的調用棧。因此,如果你想要分析this 的綁定,使用開發者工具得到調用棧,然后找到棧中第二個元素,這就是真正的調用位置。

綁定規則

我們來看看在函數的執行過程中調用位置如何決定this 的綁定對象。你必須找到調用位置,然后判斷需要應用下面四條規則中的哪一條。

1.默認綁定

首先要介紹的是最常用的函數調用類型:獨立函數調用。可以把這條規則看作是無法應用其他規則時的默認規則。

思考一下下面的代碼:

function foo() {console.log( this.a );}var a = 2;foo(); // 2

你應該注意到的第一件事是,聲明在全局作用域中的變量(比如var a = 2)就是全局對象的一個同名屬性。它們本質上就是同一個東西,并不是通過復制得到的,就像一個硬幣的兩面一樣。

接下來我們可以看到當調用foo() 時,

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 蕉岭县| 都江堰市| 余姚市| 深水埗区| 柳州市| 墨脱县| 友谊县| 石嘴山市| 永济市| 昆山市| 天台县| 汝州市| 英德市| 平湖市| 彰化县| 略阳县| 长寿区| 德保县| 崇义县| 南投县| 沂南县| 长顺县| 萍乡市| 丹凤县| 高清| 固镇县| 新丰县| 库尔勒市| 衡阳县| 来凤县| 江门市| 固原市| 北京市| 礼泉县| 宁南县| 浦江县| 文山县| 广灵县| 乐清市| 兴和县| 沭阳县|