JS中的词法作用域(静态作用域)和动态作用域

2020-02-10  本文已影响0人  有鱼是只猫

首先说明一下,JavaScript没有用动态作用域概念,但 this 机制却和动态作用域类似!

JavaScript是通过作用域链的方式进行变量查找的,而JS作用域链是词法作用域,也就做静态作用域!

词法作用域:在函数声明(定义)时确定的

动态作用域:在函数调用时确定的

var cat = '有鱼';

function person() {

console.log(cat); // 有鱼

}

function student() {

var cat = '年年';

person();

}

student();

代码分析:

①调用student函数,其内部又调用了person函数,因为JS使用的是词法作用域,即关心的是函数声明时的作用域,所以我们需要看查person定义里面的情况;

②person函数内部输出了cat,此时,找不到cat,按照作用域链特性向外层寻找,找到了cat为‘有鱼’;所以结果输出的是‘有鱼’;

③如果JS支持动态作用域,则需要看person()调用所在的作用域,即cat='年年';不过JS不支持动态作用域!

上一篇下一篇

猜你喜欢

热点阅读