We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
参考文章: 嗨,你真的懂this吗?
new 绑定 > 显式绑定 > 隐式绑定 > 默认绑定
obj.foo()
null / undefined 作为 this 的绑定对象传入 call, apply, bind 会被忽略(无效), 此时应用默认绑定规则。 如果是箭头函数, 箭头函数的 this 继承的是外层词法作用域的 this,箭头函数本身没有 this 对象。
The text was updated successfully, but these errors were encountered:
var number = 5; var obj = { number: 3, fn: (function () { var number; this.number *= 2; number = number * 2; number = 3; return function () { var num = this.number; this.number *= 2; console.log(num); number *= 3; console.log(number); } })() } var myFun = obj.fn; myFun.call(null); obj.fn(); console.log(window.number);
涉及闭包的部分,按照执行上下文的分析步骤进行解析。
obj === undefined
obj
(function() {...})()
注意:此时还没有执行到 var myFun = obj.fn。
var myFun = obj.fn
var number = 5; var obj = { number: 3, fn: (function () { var number; this.number *= 2; // window.number = 10 number = number * 2; // number === undefined number = 3; // number === 3 return function () { var num = this.number; this.number *= 2; console.log(num); number *= 3; console.log(number); } })() }
闭包部分分析结束,我们开始用 this 绑定规则来分析后半部分执行代码。
myFun.call(null)
null
undefined
// this 指向 window 对象 // 闭包中,number === 3 function () { var num = this.number; // num === 10 this.number *= 2; // window.number === 20 console.log(num); // 10 number *= 3; // number === 9 console.log(number); // 9 }
obj.fn()
// 闭包中,number === 9 function () { var num = this.number; // num === 3 this.number *= 2; // obj.number === 6 console.log(num); // 3 number *= 3; // number === 27 console.log(number); // 27 }
console.log(window.number)
20
Sorry, something went wrong.
No branches or pull requests
JS深入浅出 - 确定 this 对象指向
参考文章:
嗨,你真的懂this吗?
绑定优先级
new 绑定 > 显式绑定 > 隐式绑定 > 默认绑定
具体过程
obj.foo()
, 若对象链式调用, this 指向最近的调用上下文对象;The text was updated successfully, but these errors were encountered: