var name = "The Window";var getNameFunc= { name: "My Object", getNameFunc: function() { return function() { return this.name; }; }};alert(object.getNameFunc()()); //"The Window"(在非嚴(yán)格模式下)在高級程序設(shè)計(jì)的第7章,7.2.2關(guān)于this對象中,有幾句話實(shí)在是不太明白:以上代碼先創(chuàng)建了一個(gè)全局變量 name,又創(chuàng)建了一個(gè)包含 name 屬性的對象。這個(gè)對象還包含一個(gè)方法——getNameFunc(),它返回一個(gè)匿名函數(shù),而匿名函數(shù)又返回 this.name。由于 getNameFunc()返回一個(gè)函數(shù),因此調(diào)用 object.getNameFunc()()就會立即調(diào)用它返回的函數(shù),結(jié)果就是返回一個(gè)字符串。然而,這個(gè)例子返回的字符串是"The Window",即全局 name 變量的值。為什么匿名函數(shù)沒有取得其包含作用域(或外部作用域)的 this 對象呢?前面曾經(jīng)提到過,每個(gè)函數(shù)在被調(diào)用時(shí)都會自動(dòng)取得兩個(gè)特殊變量: this 和 arguments。內(nèi)部函數(shù)在搜索這兩個(gè)變量時(shí),只會搜索到其活動(dòng)對象為止,因此永遠(yuǎn)不可能直接訪問外部函數(shù)中的這兩個(gè)變量。1.只會搜索到其活動(dòng)對象??? 不是有個(gè)作用域鏈嗎?匿名活動(dòng)對象在最下面,在匿名對象中找不到,那就去上面的活動(dòng)對象去找咯?getNameFunc中找不到就去object去找咯。。。不就找到了嗎2.因此永遠(yuǎn)不可能直接訪問外部函數(shù)中的這兩個(gè)變量???是什么意思?外部函數(shù)是指哪個(gè)?
js閉包this對象
一只斗牛犬
2019-02-20 22:19:50