词法作用域与动态作用域
JavaScript 采用的是词法作用域(lexical scoping)
JavaScript 函数的作用域在函数定义的时候就确定了,所以实际使用的值与函数定义位置有关系。
1 | let value = 1 |
上面这个例子中,foo
函数中的value
向上寻找为在全局定义的1
,所以会打印出1
。
1 | value=1 |
而在bash
中,由于是动态作用域,所以会打印出2
。
一个例子
输出的都会是local
。
1 | let text = "global" |
JavaScript 函数的作用域在函数定义的时候就确定了,所以实际使用的值与函数定义位置有关系。
1 | let value = 1 |
上面这个例子中,foo
函数中的value
向上寻找为在全局定义的1
,所以会打印出1
。
1 | value=1 |
而在bash
中,由于是动态作用域,所以会打印出2
。
输出的都会是local
。
1 | let text = "global" |