为了账号安全,请及时绑定邮箱和手机立即绑定

关于JS函数的作用域?

关于JS函数的作用域?

神不在的星期二 2019-03-05 18:15:43
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 了


查看完整回答
反对 回复 2019-03-29
?
森栏

TA贡献1810条经验 获得超5个赞

foo使用的是全局变量的a


查看完整回答
反对 回复 2019-03-29
?
MMTTMM

TA贡献1869条经验 获得超4个赞

你可以假设一下:如果让你设计编程语言时,如果一个函数被调用,如何确定他的作用域?
函数作用域无外乎两种:静态作用--按照书写代码时函数说在的位置确定作用域;动态作用域--函数被调用是动态确定。

JS和大多数编程语言一样,采取了静态作用域。

你可以以这两个关建词进行Google搜索,非常多的博客有讨论


查看完整回答
反对 回复 2019-03-29
  • 3 回答
  • 0 关注
  • 399 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信