鍍金池/ 問答/HTML/ js閉包閉包閉包

js閉包閉包閉包

var name = "The Window";

  var object = {
    name : "My Object",

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

    }

  };

  alert(object.getNameFunc()());

誰能幫我講講為什么嗎?

回答
編輯回答
陪她鬧

alert出The Window,最里層的函數(shù)沒有在object 中調(diào)用,所以this是全局的

2017年1月19日 07:49
編輯回答
殘淚

getNameFunc的返回值是一個匿名函數(shù)(我們叫innerFunc)

object.getNameFunc()() 相當(dāng)于 innerFunc()

所以上下文window(this指向window),所以this.name是The Window

要注意:getNameFunc是object調(diào)用的,但innerFunc可不是

2018年3月1日 04:11
編輯回答
熟稔

答案是全局的name的值“the Window”,最重要考慮閉包中的this的指向問題,當(dāng)object.getNameFunc的函數(shù)內(nèi)部指向object對象(如果此時return this.name的話,這個函數(shù)的結(jié)果就是局部變量name的值了,當(dāng)然驗證得去掉一個小括號),函數(shù)執(zhí)行后會return出一個函數(shù)function(){return this.name}這個函數(shù)在加上一個小括號()代碼執(zhí)行,此時this指向window,所以會拋出全局的name的值

2017年8月31日 09:14
編輯回答
淺時光
var name = "The Window";//全局變量 在任何地方都可以使用 

  var object = {
    name : "My Object",//object對象中特有的name值 跟外層name不是同一個

    getNameFunc : function(){//對象中所屬方法
      return function(){
        return this.name;//this指代`window` 那么也就是全局變量的name
      };

    }
    console.log(this.name)//此刻,this指代object對象,this.name為"My Object"

  };

  alert(object.getNameFunc()());//調(diào)用object中的函數(shù),返回this.name為"The Window"
2017年3月2日 00:21