关于阮大大的闭包思考题

代码片段一。

var name = "The Window";

  var object = {
    name : "My Object",

    getNameFunc : function(){
      return function(){
        return this.name;
      };

    }

  };

  alert(object.getNameFunc()());

在上述代码中,不论是getNameFunc()还是它内部的function(),都是全局函数,并不只在object中执行,且由于JavaScript的声明提前(hoisting),所以执行时的this并不是object,而是外部的全局,所以输出"The Window"。

代码片段二。

var name = "The Window";

  var object = {
    name : "My Object",

    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };

    }

  };

  alert(object.getNameFunc()());
上述代码关键在于var that = this; 在getNameFunc()中执行这句话,使得function()中的that变成了getNameFunc()所在的父函数(对象),因此当执行时,that对象为object。


学习Javascript闭包(Closure)


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页