为什么这个最里面的匿名函数会属于window对象? 财富值29

2016-10-13 23:54发布

var color="red";
var obj={

 color : "pink",  getColor:function(){                 return function (){return this.color }                         }    }

alert(obj.getColor()());//弹出red
为什么这个匿名函数会属于window对象?
JS高程上说匿名函数的执行环境具有全局性?我取匿试了试了下
最里面的函数还是属于winddow对象 弹出的还是red。

付费偷看设置
发送
11条回答
Battle field - 这个人很懒,什么都没留下
1楼 · 2016-10-13 23:38.采纳回答

getColor返回的函数继续执行.

要深究他的原因, 其实也比较简单.

你告诉我这个函数是被谁调用的? 是obj吗? 显然不是.
那为何你会觉得他的this要指向obj呢?

此时函数已经执行了, getColor函数的this就指向了obj.

obj.getColor这里调用的时候就是在window里调用的吧 然后你代码里面的是closure function 所以obj里的method调用this会是window

getColor函数返回了这个匿名函数, 匿名函数再执行.

getColor被obj对象调用.

this的意思, 就是函数执行时的上下文, 注意是执行时的上下文, 跟函数定义没有关系.

这个, 属于闭包中函数上下文的内容.

由于此时函数直接在全局环境中执行, 那么他的this对象就指向了window对象. 必然弹出red.!

我们理一下:

一周热门 更多>