理解静态作用域(词法作用域)

为啥要提出作用域的概念?

一个函数,内部有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前端 - 伯乐在线

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容