function foo(){
console.log(this.a)
}
function doFoo(fn){
var a = "doFoo";
fn();
}
var obj = {
a:2,
foo:foo
};
var a = "global";
doFoo(obj.foo); //global
为什么输出的是global而不是doFoo?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这就是一个局部变量的问题,将问题往深处看,本质的调用如下所示:
function foo(){
console.log(this.a)
}
function doFoo(){
var a = "doFoo";
foo();
}
var a = "global";
doFoo();
输出也是global,因为变量没有进行传递,foo中只识别父级作用域和本作用域内的变量,调用者的变量是不识别的