27
2020
07

下面的代码会在 console 输出神马?为什么?

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();


第一个和第二个的输出不难判断,在 ES6 之前,JavaScript 只有函数作用域,所以 func 中的 IIFE 有自己的独立作用域,并且它能访问到外部作用域中的 self,所以第三个输出会报错,因为 this 在可访问到的作用域内是 undefined,第四个输出是 bar。如果你知道闭包,也很容易解决的:


(function(test) {

            console.log("inner func:  this.foo = " + test.foo);  //'bar'

            console.log("inner func:  self.foo = " + self.foo);

}(self));

如果对闭包不熟悉,可以戳此:从作用域链谈闭包

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。