因為你定義的name變量本身就是個全局變量,而你對象里面又沒有定義有相同的變量名,JavaScript會依次從內部外部尋找name這個變量,你可以把變量寫到對象里面去。
默認都是指向全局對象的,瀏覽器是window。你這個code應該
因為閉包里的this指向window,你可以在閉包里console.log(this)一下,會發(fā)現輸出window。至于為什么閉包里的this會指向window,我還分析不出。不過這個結果請牢記。
這個問題,并不是說閉包函數的this一定指向全局,而是函數作用域的問題,一個匿名函數作為返回值,這個匿名函數在執(zhí)行時已經脫離了原來的scope,作用域變?yōu)榱巳?,this自然指向全局。js中有很多這種情況,比如最常見的回調函數。
分析一下作用域 全局中object -- > object里面的name/getNameFunc --> getNameFunc函數 -- > 返回函數的立即調用。
方法是誰調用的誰就是this。這個列子里面,object.getNameFunc()返回了一個自執(zhí)行函數