来自代码的javascript输出示例

时间:2015-08-18 05:29:16

标签: javascript

我是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是如何工作的。

1 个答案:

答案 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 === windowwindow.foo

如果您run your code in strict mode,则调用undefined会生成此错误myObject.func(),因为在内部函数中Uncaught TypeError: Cannot read property 'foo' of undefined