你不知道的JavaScript读书笔记

在福昕阅读器中,"适配宽度"阅读模式后,点击标签跳转,又回“适合页面”,设置办法:Ctrl+K 弹出:“偏好设置“,“页面显示”,勾选最后一个复选框即可

在第 2 章中, 我们对比了动态作用域和词法作用域模型, JavaScript 中的作用域就是词法作用域( 事实上大部分语言都是基于词法作用域的)。

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

词法作用域是一套关于引擎如何寻找变量以及会在何处找到变量的规
则。 词法作用域最重要的特征是它的定义过程发生在代码的书写阶段( 假设你没有使用
eval() 或 with)。

function foo() {
console.log( a ); // 2
}
function bar() {
var a = 3;
foo();
}
var a = 2;
bar();

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

需要明确的是, 事实上 JavaScript 并不具有动态作用域。 它只有词法作用域, 简单明了。
但是 this 机制某种程度上很像动态作用域。
主要区别: 词法作用域是在写代码或者说定义时确定的, 而动态作用域是在运行时确定
的。( this 也是! ) 词法作用域关注函数在何处声明, 而动态作用域关注函数从何处调用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容