js之词法作用域与动态作用域

事实上JavaScript并不具有动态作用域,它只有词法作用域,简单明了,但是this机制某种程度上很像动态作用域

词法作用域:是一套引擎如何寻找变量以及会在何处找到变量的规则,它是定义在词法阶段的作用域,是由写代码时将变量和块作用域写在哪里来决定的。
动态作用域:动态作用域并不关心函数和作用域是如何声明以及在何处声明的,只关心它们从何处调用。类似this的指向问题

例子

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

foo是在全局作用域中定义的,无论在何处调用它的作用域都不会发生变化,都是全局作用域(根据词法作用域来看)。所以会找响应的全局中的变量a,若没找到就会输出undefined。

参考书籍:
《你不知道的js》

猜你喜欢

转载自www.cnblogs.com/raind/p/10767622.html