这段代码如何理解(关于作用域链和私有变量)
(function(){
function A(){
var v = "a";
this.getVar = function(){
console.log(v);
}
}
function B(){
var v = "b";
A.call(this);
}
var b = new B();
b.getVar(); //a
})();
求这段代码如何理解,为什么var v = "a";注释掉之后会报错,如果用作用域来理解不应该输出b吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
其中的
v
会一直向上查找,直到window
。这里会查找function A()
,然后查找外面的自执行函数,之后再往上找到window
,都没有v
。为何不是
b
,因为v = b
在function B()
中,在function A()
里找不到啊。call
不会更改作用域,只会改变this
。那么修改一下
这个是语法域决定的,而不是在运行的时候决定
A中查找v,只会查找A自己函数内定义的v
找不到,就去上一级找,即这个IIFE里面找,也没找到
再上,global里面也没找到,就报错了