请大佬解释一下下面js代码的结果,谢谢!

var a = 10;
    function foo(){
      console.log(a);
    }

    (function(funcArg){
      var a = 20;
      funcArg();
    })(foo);
阅读 2.3k
3 个回答

变量作用域分为全局和局部
如果当前做用域没有变量, 会顺着代码的词法范围往外一层一层的找.
词法范围的意思就是程序文本.

var a = 10; // 全局 a = 10
    function foo(){
      console.log(a); // 此函数中没有a, 往外找, 找到全局a
    }

    (function(funcArg){
      var a = 20; // 有var声明, 此处的a是局部变量, 在这个函数中有效
                  // 如果没有var声明, 那就是对全局(上面那个a)赋值, 输出会是20
      funcArg();
    })(foo); 

这个问题我也不知道怎么回答比较合适,因为我的也很菜,但是我发现有位大佬的js深入系列文章,你看完应该会有所收获,希望能对你有帮助
image.png

我运行了下也懵了下,于是到@柱子哥 推荐的文章里面现学现说下
可以说看了第二章词法作用域和动态作用域就懂了
首先,函数的作用域,在JS里是静态作用域,什么意思呢,就是在定义的时候就已经定了(在当前找不到变量就往上级作用域找)
那foo在定义的时候,就已经决定了,他的作用域(函数里)和上级作用域(函数外,也就是全局)。
所以不管在哪里调用,它都会:要不从自己的作用域里,要不就是它上级作用域找这个变量。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题