我理解的作用域
JavaScript采用静态作用域:也叫词法作用域,函数的作用域是定义的时候就确定了;(因为JavaScript采用的是词法作用域,函数的作用域基于函数创建的位置。)
var value = 1; function foo() { console.log(value); } function bar() { var value = 2; foo(); } bar(); // 结果是 1 分析,从上到下未执行时候foo中的value在全局条件下,此时的value是等于1的,而不会随着foo在bar中执行,value就变成2了; 所以是静态作用域,函数声明的时候就确定了作用域
这篇文章这样分析也可以 https://github.com/mqyqingfeng/Blog/issues/3
执行 foo 函数,先从 foo 函数内部查找是否有局部变量 value,如果没有,就根据书写的位置,查找上面一层的代码,也就是 value 等于 1,所以结果会打印 1。