鍍金池/ 問(wèn)答/HTML5  HTML/ 關(guān)于閉包,如何理解?

關(guān)于閉包,如何理解?

哪位大神幫我解釋一下下面的代碼?
1
var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      return function(){
        return this.name;
      };
    }
  };
  alert(object.getNameFunc()());

2
var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };
    }
  };
  alert(object.getNameFunc()());

回答
編輯回答
別瞎鬧

第一個(gè)alert:返回的函數(shù)里面返回this.name,因?yàn)楹罄m(xù)沒(méi)有引用,所以getNameFunc直接釋放了,因此這里的this存在丟失問(wèn)題,這時(shí)候直接指向了window,于是alert的是The Window。
第二個(gè)alert:返回的函數(shù)里面返回that.name,但是這里的thatgetNameFunc有定義,因此getNameFunc就沒(méi)有被釋放,然后存在在作用域中,于是可以通過(guò)作用域鏈向上查找that,先找到的是object作用域,于是alert的是My Object

第二個(gè)alert體現(xiàn)的就是閉包的作用,能夠保持作用域鏈的引用,可以在全局環(huán)境下訪問(wèn)到函數(shù)的內(nèi)部作用域。

2017年9月6日 22:07
編輯回答
雨萌萌

第一個(gè)alert:The Window
第二個(gè)alert:My Object

2018年9月6日 11:37
編輯回答
離人歸

采納答案里和我理解的不太一樣
不是因?yàn)楹罄m(xù)沒(méi)有引用,所以getNameFunc直接釋放吧
而是return function(){return this.name;}匿名函數(shù)沒(méi)調(diào)用對(duì)象就指向global

2018年7月20日 11:06