词法作用域与动态作用域 Posted on 2020-07-28 In JavaScript JavaScript 采用的是词法作用域(lexical scoping)JavaScript 函数的作用域在函数定义的时候就确定了,所以实际使用的值与函数定义位置有关系。 123456789101112let value = 1function foo() { console.log(value)}function bar() { let value = 2 foo()}bar() // 1 上面这个例子中,foo函数中的value向上寻找为在全局定义的1,所以会打印出1。 1234567891011value=1function foo(){ echo $value}function bar() { local value=2 foo}bar #2 而在bash中,由于是动态作用域,所以会打印出2。 一个例子输出的都会是local。 1234567891011let text = "global"let foo = () => { let text = "local" let f = () => text return f() // return f}console.log(foo()) // local// console.log(foo()()) // local