newPromise / js-

0 stars 0 forks source link

关于词法作用域的问题 #27

Open newPromise opened 6 years ago

newPromise commented 6 years ago

代码如下:

var a = 2;
function bar () {
  console.log(a);
}
function foo () {
  var a = 3;
  bar();//2
  function baz () {
    console.log(a);// 3
  }
}
foo();

对于变量的查找是从当前的作用域开始,一级一级向上查找的

注意: 无论函数在哪里被调用,无论函数如何调用,函数的词法作用域仅在函数被声明所处的位置决定

在上面的代码中,函数 bar 是在全局变量中被声明的,虽然在函数 foo 中被调用,但是对于 a 的查找是从全局变量开始查找的。

在函数 baz 中,函数 baz 在 函数 foo 中被声明,在 foo 内部查找到 a 因此 a == 3,如果在 函数 中没有找到变量 a 那么, 会沿着作用域链一层一层的向上查找