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

今天看到闭包,被this搞蒙了,求解答。。。

今天看到闭包,被this搞蒙了,求解答。。。

comlejade 2015-12-07 16:09:01
var name = "window"; var object = {     name: "My Object",     getNameFunc: function(){         return function(){         return this.name;             };         }    }; alert(object.getNameFunc()());  //"window"var name = "window"; var object = {     name: "My Object",     getNameFunc: function(){         var that = this;         return function(){         return that.name;         };     } }; alert(object.getNameFunc()());  //My Obect先来个经典的例子,首先那个第一个this是怎么变成全局对象的?在JS高级程序设计中这样解释:每个函数在被调用时,其活动对象都会自动取得两个特殊变量:this 和 arguments。内部函数在搜索这两个变量时,只会搜索到其活动对象为止,因此永远不可能直接访问外部函数中这两个变量。只会搜索到活动对象这个是明白的,再往下就不懂了。。。
查看完整描述

1 回答

已采纳
?
木子舟义

TA贡献33条经验 获得超4个赞

每一个没有用 someobject.somefunc()  这样调用的函数里的this都是window..

你的代码中object.getNameFunc() 指向的是里面的一个匿名函数。因为用的someobject.somefunc()这种方式调用 所以this 指向的是object。然而在这个函数里又返回了一个函数。而且这个函数并没有用someobject.somefunc()这种方式调用。所以它里面的this指向window

不理解可以再问

查看完整回答
1 反对 回复 2015-12-07
  • comlejade
    comlejade
    谢谢啊,这第一句话 每一个没有用 someobject.somefunc() 这样调用的函数里的this都是window..还真是不知道,涨姿势了。那要是按书上这么解释,内部函数搜索到的活动对象中没有外面的变量吗?这个该怎么理解。。。不懂,这样想,我好想对这个闭包的作用域链不太明白。
  • i爱慕客
    i爱慕客
    我要和你结拜兄弟
  • comlejade
    comlejade
    你要知道,落地为兄弟,何必骨肉亲啊。。。
  • 1 回答
  • 0 关注
  • 1669 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信