function foo(){ console.log(a); }function bar () { var a = 3; foo(); } var a = 2; bar(); 上述代码,为什么结果是2呢,不应该是在bar()函数里面调用的foo()函数,所以应该先在bar()的作用域里面找有没有a,然后再去全局作用域里找吗?希望走过、路过的大神能帮忙解决一下疑惑,万分感谢。
3 回答
幕布斯7119047
TA贡献1794条经验 获得超8个赞
这里的作用域规则是定义时的作用域规则,不是你调用时的,即静态作用域
如果你这样写:
function bar () {
var a = 3;
function foo(){
console.log(a);
}
foo();
}
var a = 2;
bar();
那肯定输出 3 了
MMTTMM
TA贡献1869条经验 获得超4个赞
你可以假设一下:如果让你设计编程语言时,如果一个函数被调用,如何确定他的作用域?
函数作用域无外乎两种:静态作用--按照书写代码时函数说在的位置确定作用域;动态作用域--函数被调用是动态确定。
JS和大多数编程语言一样,采取了静态作用域。
你可以以这两个关建词进行Google搜索,非常多的博客有讨论
添加回答
举报
0/150
提交
取消