理解词法作用域和动态作用域

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

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

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

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

代码分析:

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

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

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200211A05AYH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券