(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吗?
其中的
v
会一直向上查找,直到window
。这里会查找function A()
,然后查找外面的自执行函数,之后再往上找到window
,都没有v
。为何不是
b
,因为v = b
在function B()
中,在function A()
里找不到啊。call
不会更改作用域,只会改变this
。那么修改一下