词法作用域和动态作用域

本文探讨了词法作用域和动态作用域的区别,重点介绍了JavaScript中的词法作用域,通过foo函数的例子展示了如何查找变量。词法作用域在代码编写时确定,关注函数声明的位置;而动态作用域则在运行时决定,依据函数调用的上下文。此外,还提及了this机制与动态作用域的相似之处,以及箭头函数中的this表现得更像词法作用域。
摘要由CSDN通过智能技术生成

词法作用域

大部分的语言都是词法作用域,包括js,词法作用域是一套关于引擎如何寻找变量以及会在何处找到变量的规则。词法作用域最重要的特征是它的定义过程发生在代码的书写阶段

function foo() {
  console.log(a) //2
}

function bar() {
   var a=3;
   foo();
}
var a = 2;
bar();

词法作用域让foo()中的a通过RHS引用到了全局作用域中的a,因此会输出2。

动态作用域

动态作用域并不关心函数和作用域是如何声明以及在何处声明的,只关心它们从何处调用。换句话说,作用域链是基于调用栈的,而不是代码中的作用域嵌套。

this机制某种程度上很像动态作用域。但是箭头函数里的this反而像词法作用域

总结:

词法作用域是在写代码或者说定义时确定的,而动态作用域是在运行时确定的。词法作用域关注函数在何处声明,而动态作用域关注函数从何处调用。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值