为啥要提出作用域的概念?
一个函数,内部有x=5. 外部又有x=4,那么到底哪个起作用?这时就需要作用域来进行规定。
什么是静态作用域?
举个例子
如下调用bar()的时候。先走到foo(),然后再调用foo()之后这个value是多少?
1还是2?按位置(所谓静态)。往上找,因此是1.
当采用动态作用域时,执行foo函数,依然是从foo函数内部查找是否有局部变量value。如果没有,就从调用函数的作用域,也就是bar函数内部查找value变量,所以最后会打印2
var value = 1;
function foo() {
console.log(value);
}
function bar() {
var value = 2;
foo();
}
console.log(bar()) //1
总结
根据书写位置来找的,静态作用域
从调用函数的作用域来找的,动态。如上面的foo()是被bar()调用。然而foo()里面又没有对value声明。因此就去从调用它的函数来找,就是bar函数。
ps:python也是静态作用域
>>> var()
1
>>> value=1
>>> def foo():
print (value)
>>> def bar():
value=2
foo()
>>> bar()
1
那哪些语言是动态作用域呢?
比如bash
JavaScript 深入之词法作用域和动态作用域 - WEB前端 - 伯乐在线