猿问

关于JS函数的作用域?

function foo(){ 

  console.log(a); 

}

function bar () { 

  var a = 3; 

  foo(); 

var a = 2; 

bar(); 

上述代码,为什么结果是2呢,不应该是在bar()函数里面调用的foo()函数,所以应该先在bar()的作用域里面找有没有a,然后再去全局作用域里找吗?

希望走过、路过的大神能帮忙解决一下疑惑,万分感谢。


神不在的星期二
浏览 400回答 3
3回答

幕布斯7119047

这里的作用域规则是定义时的作用域规则,不是你调用时的,即静态作用域如果你这样写:function bar () {   var a = 3;   function foo(){     console.log(a);   }  foo(); } var a = 2; bar(); 那肯定输出 3 了

森栏

foo使用的是全局变量的a

MMTTMM

你可以假设一下:如果让你设计编程语言时,如果一个函数被调用,如何确定他的作用域?函数作用域无外乎两种:静态作用--按照书写代码时函数说在的位置确定作用域;动态作用域--函数被调用是动态确定。JS和大多数编程语言一样,采取了静态作用域。你可以以这两个关建词进行Google搜索,非常多的博客有讨论
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答