我是javascript的新手,想知道代码的输出是什么:
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);
}());
}
};
不确定foo是如何工作的。
答案 0 :(得分:5)
Javascript中的每个函数调用都会根据函数的调用方式重置this
的值(有关控制this
的五种方法,请参阅this answer)。
因此,当您使用仅仅是正常函数调用的IIFE结构(function() { ... })()
时,this
的值将重置为window
对象或undefined
如果以严格模式运行。
因此,如果您未在strict
模式下运行,则内部功能中的this.foo
引用将尝试访问可能为window.foo
的{{1}}。
而且,当我在a jsFiddle that is not in strict mode中运行它并确实调用undefined
时,控制台会显示:
myObject.func()
其他outer func: this.foo = bar
outer func: self.foo = bar
inner func: this.foo = undefined
inner func: self.foo = bar
声明确认内部功能console.log()
,当然,this === window
为window.foo
。
如果您run your code in strict mode,则调用undefined
会生成此错误myObject.func()
,因为在内部函数中Uncaught TypeError: Cannot read property 'foo' of undefined
。