function a(){ y = function () { x = 2; }; return function () { var x = 3; y(); console.log(this.x); debugger; }.apply(this, arguments); } a();//2
為什么是輸出 2
。
在非嚴(yán)格模式下不使用var定義一個變量的話,會使得這個變量作為全局對象的屬性存在。瀏覽器即window,Node即global。
因?yàn)檫@里綁定了this的作用域,而這里的this其實(shí)是window作用域。所以y函數(shù)執(zhí)行之后this.x == 2, x == 3 輸出結(jié)果。
指定window.x = 2
然后你又在window下調(diào)用了a 當(dāng)然打印2了
當(dāng)一個函數(shù)作為普通函數(shù)調(diào)用的時候,其this指向的是全局對象。