为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥6287543 2018-09-04 10:42:49
var color = "red";var obj = {    color: "pink",    getColor: function() {         return function() {            return this.color         }     } } alert(obj.getColor()()); //弹出red为什么这个匿名函数会属于window对象?JS高程上说匿名函数的执行环境具有全局性?我取匿试了试了下最里面的函数还是属于winddow对象,弹出的还是red。
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

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

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

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

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

我们理一下:

  1. getColor被obj对象调用.

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

  1. getColor返回的函数继续执行.

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

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


查看完整回答
反对 回复 2018-10-18
  • 1 回答
  • 0 关注
  • 380 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号