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

本文探讨了JavaScript中的两种作用域——词法作用域和动态作用域。在词法作用域中,变量查找遵循从当前作用域到全局作用域的链式查找,而动态作用域则在运行时根据调用栈确定变量所在位置。通过示例代码解释了两种作用域下变量`a`的查找过程和不同输出结果。
var a = 2;
function foo() {
  console.log(a);
}
function bar() {
  var a = 3;
  foo();
}
bar();

// 1.如果处于词法作用域,也就是现在的javascript环境。
// 变量a首先在foo()函数中查找,没有找到。
// 于是顺着作用域链到全局作用域中查找,找到并赋值为2。
// 所以控制台输出2

// 2.如果处于动态作用域,同样地,变量a首先在foo()中查找,没有找到。
// 这里会顺着调用栈在调用foo()函数的地方,也就是bar()函数中查找,找到并赋值为3。
// 所以控制台输出3
  • 词法作用域(静态作用域):正常情况下,查找一个变量会先从当前作用域查找,没有的话往外部作用域查找,直到全局作用域
  • 动态作用域:
  • 区别:词法作用域是在定义时确定的,而动态作用域是在运行时确定的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值