在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ js閉包閉包閉包

js閉包閉包閉包

var name = "The Window";

  var object = {
    name : "My Object",

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

    }

  };

  alert(object.getNameFunc()());

誰(shuí)能幫我講講為什么嗎?

回答
編輯回答
陪她鬧

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

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

getNameFunc的返回值是一個(gè)匿名函數(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的指向問(wèn)題,當(dāng)object.getNameFunc的函數(shù)內(nèi)部指向object對(duì)象(如果此時(shí)return this.name的話(huà),這個(gè)函數(shù)的結(jié)果就是局部變量name的值了,當(dāng)然驗(yàn)證得去掉一個(gè)小括號(hào)),函數(shù)執(zhí)行后會(huì)return出一個(gè)函數(shù)function(){return this.name}這個(gè)函數(shù)在加上一個(gè)小括號(hào)()代碼執(zhí)行,此時(shí)this指向window,所以會(huì)拋出全局的name的值

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

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

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

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

  };

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