共计 478 个字符,预计需要花费 2 分钟才能阅读完成。
静态作用域指的是一段代码,在它执行之前就已经确定了它的作用域,简单来说就是在执行之前就确定了它可以应用哪些地方的作用域 (变量)。
动态作用域–函数的作用域是在函数调用的时候才决定的
JavaScript 采用的是词法作用域即静态作用域;
// 静态作用域:var a = 10;
function fn() {
var b = 1;
console.log(a + b);
}
fn(); // 11
在创建 fn 函数时的时候就已经确定了它可以作用哪些变量,如果函数 fn 里面有变量 a 就直接操作变量 a,
如果没有就往上一级查找,这就是静态作用域
// 动态作用域:function foo() {console.log(a);
}
function bar() {
var a = 3;
foo();}
var a = 2;
bar(); // 2;
bar 调用,bar 里面 foo 被调用,foo 函数需要查找变量 a,由于 JavaScript 是词法作用域 (即静态作用域),foo 被解析时在全局作用域.
所以只能在全局作用域中找 a, 输出结果为 2,而非 bar 作用域中的 a。如果 js 采用的时动态作用域,那么 foo 在 bar 中调用,就会先在 bar 中查询 a, 输出为 3。
正文完
发表至: javascript
2019-06-17