词法作用域与动态作用域
概念
作用域是指程序源代码中定义变量的区域。
作用域规定了如何查找变量,即当前执行代码对变量的访问权限。
JavaScript采用词法作用域(lexical scoping),即静态作用域。
静态作用域与动态作用域
因为 JavaScript采用词法作用域,因此函数作用域在定义时就被决定了。
而词法作用域相对的是动态作用域,即函数的作用域在调用的时候决定。
例子:
var value = 1;
function foo() {
console.log(value);
}
function bar() {
var value = 2;
foo();
}
bar();
// 结果是 ??? 1
动态作用域
bash是动态作用域,将文件后缀改成bash,然后进入相应的目录,执行 bash ./***.bash
value=1
function foo () {
echo $value;
}
function bar () {
local value=2;
foo;
}
bar // 2