JavaScript关于this的一道小题
var a = 10;
var obj1 = {
a: 20,
fn: (function() {
this.a *= 2;
a = 5;
var a = 6;
return function() {
this.a *= a;
console.log(a)
}
})()
}
var obj2 = {
a: 30
}
var fn = obj1.fn;
fn(); //6???
obj1.fn(); //6???
obj1.fn.call(obj2); //6???
如上所示,函数运行之后,结果分别是6,6,6,但是我想来想去都不明白为什么是6....,就算var a = 6之后a等于6了,那为什么this.a *= a 之后a还是等于6呢?求大神指点一二。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
上面注释只是说了是什么,而没说为什么.
如果你想要完全理解为什么的话,可以自行搜索关键词
预编译
,作用域
,作用域链
,变量提升
等关键词.也可以看看下面的参考链接.
或者可以看最后的视频,我第一次了解到预编译就是在那个视频里面看到的.我给的链接的小节是讲预编译,之前的章节有讲作用域,如果基础比较差就从头看起吧.
之所以推荐,首先肯定是讲的好,值得推荐.当然最重要的是免费的.
ヾ(≧▽≦*)o
参考
文章
视频