作用域

作用域是指程序源代码中定义变量的区域
作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限
JavaScript采用词法作用域,也就是静态作用域

静态作用域与动态作用域

因为javascript采用的是词法作用域,函数的作用域在函数定义的时候就决定了
词法作用域相对的是动态作用域,函数的作用域是在函数调用的时候才决定的

  1. var value=1;
  2. function foo(){
  3. console.log(value)
  4. }
  5. function bar(){
  6. var value=2;
  7. foo();
  8. }
  9. bar()

采用javascript词法作用域执行过程
执行foo()函数,先从foo()函数内部查找是否局部变量value ,如果没有,就根据书写的位置,查找上面一层的代码,也就是value等于1,所以结果会打印1
加入才有动态作用域,分析过程
执行foo()函数,依然是从foo()函数内部查找是否有局部变量value,如果没有,就从调用函数的作用域,也就是bar函数内部查找value变量,所以会打印2