JavaScript之词法作用域

作用域

在JS中作用域是一个相当重要的概念,我们一般把作用域分为两类:即静态作用域和动态作用域,JS采用的就是静态作用域(词法作用域)

对于静态作用域有一个相当重要的点是: 函数的作用域在函数定义的时候就决定了, 这个相当重要哦,接下来我们直接看一个例子:

var value = 100;

function foo() {
    console.log(value);
}

function bar() {
    var value = 1;
    foo();
}

bar();

我们先看下在控制台的执行结果 =>


default

接下来相必有些人这里有些疑问了,为什么这里的console.log的结果是100而不是1哈,其实是这样的
当我们调用bar()的时候会在函数内部调用foo()函数,但是还记得我们上面说了函数的作用域在函数定义的时候就决定了
也就是说当我们在定义foo这个函数的时候,根据作用域链的查找: foo内部没有申明value变量,我们就到全局查找到value的值是100(这个是在函数定义的时候已经被决定了),当我们调用foo()的时候,打印的结果自然就是100。

假设JS这门语言在设计的时候采用的是动态作用域(函数的作用域是在函数调用的时候才决定的),那么这里的执行结果就是1了。

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

推荐阅读更多精彩内容