我最近开始学习 Javascript,同时对卡在这段代码中的代码进行了一些实验:
var k = {
ab: "hi",
func: function() {
console.log("inner1" + this.ab);
(function() {
console.log("inner2 " + this.ab)
}())
}
};
k.func();
此代码给出结果“inner1 hi”和“inner2 undefined”。
我不明白为什么它的 undefined
在第二个 console.log
中?
最佳答案
一个函数的this
是在你调用它的时候绑定(bind)的,这取决于你如何调用它。将其作为值而不是属性调用 - (expression)()
而不是 object.method()
- 将导致 this
被设置到全局对象,或者在严格模式下为 undefined
。
函数对象上有两种方法可以使用显式指定的 this
调用函数:call
和 apply
.您可以在此处使用前者。
(function() {
console.log("inner2 " + this.ab);
}<b>.call(this)</b>);
这会将调用函数的 this
转发给内部函数。
或者,您可以将 this
分配给一个变量。
<b>var that = this;</b>
(function() {
console.log("inner2 " + <b>that</b>.ab);
}());
关于javascript - 在 Javascript 中用 this 理解内部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31669243/