JavaScript-js 闭包

发布于 2016-12-23 07:43:36 字数 415 浏览 1269 评论 3

        var name="kitty";
var object={
name:"my object",
getnamefunc:function(){
var that=this

return function(){
alert(this)
return this.name
};
}
}
alert(object.getnamefunc()())

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夜无邪 2017-05-27 14:41:10

js中的this指向与Java/C++这些静态语言不同,他取决于"调用时的方式",这点在ECMA规范中有详细说明,原文比较复杂就不贴了,我平时跟初学者解释时,一般会简化为:

js函数中的this,总是指向调用时点(.)前面那个东西,若调用时没有写点(.)则指向window

虽然不完整没有涉及到base object,global scope之类的东东,但对于初学者是很好理解的。这里最重要的就是“调用时”,即this是运行期决定的,例如:

var x, y, z;
x = {
name: "I'm X",
method: function() { console.log(this); }
};
y = {
name: "I'm Y"
}
y.method = x.method;
z = x.method;
x.method();
y.method();
z();

这个结果第一次是点前面的x,第二次是点前面的y,第三次因为没写点(.)所以是window

对于你的情况,最后的object.getnamefunc()()相当于:
var x = object.getnamefunc();
x();
所以当然是window

灵芸 2017-05-04 03:29:06

this还是他的上下文环境相关的 object.getnamefunc()这步完了之后 就相当于一个普通的全局函数当然就是指向了window

泛泛之交 2017-03-12 14:20:03

this 对象是在运行时基于函数的执行环境绑定的,如果this在全局范围就是window,如果在对象内部就指向这个对象。而闭包却在运行时指向window的,因为闭包并不属于这个对象的属性或方法。
你始终记着 this 是调用这个方法的对象的引用, 谁调用的这个方法就是谁.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文