我有以下代码段。
var myObject = {
foo: "bar",
func: function() {
var self = this;
console.log("outer func: this.foo = " + this.foo);
console.log("outer func: self.foo = " + self.foo);
(function() {
console.log("inner func: this.foo = " + this.foo);
console.log("inner func: self.foo = " + self.foo);
}());
}
};
myObject.func();
具有以下结果。
outer func: this.foo = bar
outer func: self.foo = bar
inner func: this.foo = undefined
inner func: self.foo = bar
我对此代码段有几个问题。
答案 0 :(得分:2)
你的问题中确实有两个不同的概念:
this
keyword。尝试在闭包中使用this
是known to confuse many people。
将嵌套函数放在外部函数中的想法是什么?这对现实生活代码有什么好处?
关于闭包的文档非常好。如果您不熟悉闭包,那么要点是它会记住定义函数的环境。
E.g。 self.foo
会返回正确的值。
应用程序主要是函数式编程/ currying。
E.g。闭包内的self.foo
确实返回正确的值,但您不必将值传递给函数。
我也在努力使用'this'关键字,我一直认为'this'代表全局上下文,所以我对它在外部函数中的工作原理感到困惑,而不是在内部函数中。
在这个区块内:
(function() {
console.log("inner func: this.foo = " + this.foo);
console.log("inner func: self.foo = " + self.foo);
}());
我们不使用对象方法,而是使用简单的调用。由于您未使用strict
模式,因此this
默认为全局对象。
在另一部分:
console.log("outer func: this.foo = " + this.foo);
console.log("outer func: self.foo = " + self.foo);
我们在一个对象方法里面; this
是指对象myObject
。
strict
模式会发生什么?window.foo = 'window foo';
会怎么样?答案 1 :(得分:0)
也许你可以看到这一点来理解"这个"在javascrpt。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this