什么是作用域
举个例子:
let x = 1;
这个语句中有一个变量 x
,有一个值 1
有一个变量绑定 x = 1
所谓 作用域,就是 变量绑定 的有效范围。就是说,在这个作用域中,这个变量是有效的,出了这个作用域就无效了
静态作用域(词法作用域)
在函数 定义 时就决定
动态作用域
在函数调用时决定
举个例子
var value = 1;
function foo() {
console.log(value);
}
function bar() {
var value = 2;
foo();
}
bar();
如果采用静态作用域:
- 执行
foo()
函数 - 从
foo()
函数内部查找是否有局部变量 value - 如果没有,从书写位置查找上一层代码 value = 1
如果采用动态作用域
- 执行
foo()
函数 - 从
foo()
函数内部查找是否有局部变量 value - 如果没有,从调用函数作用域,也就是 bar 函数内部查找 value, value = 2
网友评论