關於javascript中的this
剛剛讀完《你不知道的javascript》(上卷),自我感覺良好,昨天在node社群上看到一個關於js的this的問題,就想著測試以下自己,悲劇的是沒做出來。 今天看了下之前的總結,分析了下問題,在這裡寫下分析過程,也算是一種鞏固知識的措施。 問題:
var length = 10;
function fn() {
console.log(this.length)
};
var obj = {
length: 5,
method: function (a) {
a();
console.log(arguments[0]);
arguments[0]();
a.call(obj, 12);
}
};
obj.method(fn, 1, 2);
分析思路: 首先,通過obj.method進行方法呼叫,此時應用的是this的隱式繫結規則,method方法中的this會指向obj,接下來執行隱式賦值,將全域性函式fn傳入了method中,此時會產生this丟失,進而應用this的預設繫結規則,將this指向全域性,所以第一個a()函式執行的結果是10
然後是arguments0的方式繼續呼叫fn,由於arguments[0]是引用的arguments物件中的fn,所以此時的this指向的是arguments物件,所以返回的this是3
最後是呼叫的call方法,所以應用的是this的顯式繫結,將fn中的this繫結到了obj這個物件,所以是5
相關文章
- 關於JavaScript中arguments的用法JavaScript
- 關於JavaScript中this的軟繫結JavaScript
- 關於Javascript中的valueOf與toStringJavaScript
- 關於Javascript中的”use strict”的那些事JavaScript
- 關於JavaScript的困惑JavaScript
- 關於javascript中變數及函式的提升JavaScript變數函式
- 關於IBM Web Sphere 中的Javascript除錯IBMWebJavaScript除錯
- 關於Javascript的des加密JavaScript加密
- 關於dom(javascript)JavaScript
- 關於javascript的this指向問題JavaScript
- javascript中的with關鍵字JavaScript
- javascript中關於匿名函式高階介紹JavaScript函式
- 關於 JavaScript 中的特殊函式,你應該這樣看JavaScript函式
- 分享關於JavaScript中執行上下文(this)的使用心得JavaScript
- 關於javascript中對浮點加,減,乘,除的精度分析JavaScript
- 關於JavaScript跨域的若干想法JavaScript跨域
- 關於javascript原型鏈的記錄JavaScript原型
- JavaScript 中那些關於座標和距離的屬性與方法JavaScript
- 關於javascript中陣列元素刪除問題的討論 (轉)JavaScript陣列
- 關於JavaScript變數提升JavaScript變數
- JavaScript中this關鍵字JavaScript
- javascript關於toFixed的計算規則JavaScript
- 關於JavaScript的記憶體機制JavaScript記憶體
- 關於 iOS 中的庫iOS
- 關於 Angular 中的 AuthGuardAngular
- 關於js中的值JS
- 關於js中的‘==’ 與 ‘===’JS
- 關於js中的this呼叫JS
- 關於JavaScript中this的指向,你知曉幾分?請速來圍觀!JavaScript
- 完全理解JavaScript中的this關鍵字JavaScript
- 關於 JavaScript 錯誤捕獲JavaScript
- 關於 JavaScript 字串的一個小知識JavaScript字串
- 關於Spring中的useSuffixPatternMatchSpring
- vue中 關於$emit的用法VueMIT
- 關於Java中的equals方法Java
- 關於http包中的handlerHTTP
- delphi中關於字串的操作字串
- 關於oracle中的row pieceOracle