javascript - javascript中范围和命名空间有什么区别
问题描述
大家好。实际上我是新学 Javascript 的。我在 javascript 中阅读了有关范围的信息。然后我在某个地方读到了 Js 中的命名空间,我想知道命名空间是否与作用域完全相同,所以我搜索了但结果只是针对 python 进行了解释,我不知道它们在 js 中是否相同。
有人会解释 js 中范围和命名空间之间的区别吗?
我对范围的定义:范围是编程语言中的一个概念,可以帮助我们防止变量污染。这意味着我们控制代码中变量和函数的可访问性。js 是一种函数作用域语言,这意味着如果我们创建新函数,就会创建新作用域。我们可以在新关键字let , const的帮助下声明块作用域而不是函数作用域变量和函数
解决方案
“命名空间”仅在 JavaScript 规范中与模块命名空间外来对象有关,它是当您import *
从模块执行操作时创建(或重用)的对象。它包含所有模块的命名导出的属性(default
如果它具有默认导出,则调用一个属性)。
在 JavaScript 有官方模块之前,JavaScript 的定义中根本没有使用“命名空间”。它被非正式地用来指代由一个代码单元(松散地称为“模块”)创建的对象,该对象具有该模块的“导出”属性,如下所示:
// ES5 code - one style of the "revealing module pattern"
var MyLib = (function() {
function internalFunction() {
// ...
}
return {
exportedFunction: function() {
// ...
}
};
})();
在那里,MyLib
有时被称为“命名空间”,但这纯粹是非正式的。它只是一个对象。
“范围”是程序源代码的一个区域,它定义了变量和相关事物的容器。(有时它用于指代规范定义的结果“对象”,但它们更恰当地称为词法环境记录。)例如,此源代码有两个显式范围:
function example(someParam) {
if (someParam === "some value") {
console.log("something");
}
}
范围是:
{}
定义函数体内的函数范围。- 块范围内
{}
定义块上的if
.
(函数周围还有隐式作用域,这取决于源代码出现的位置——有时称为“环境作用域”。)
在运行时,当example
被调用时,规范描述了为函数作用域创建一个环境记录,然后为块作用域创建一个环境记录。(这只是规范语言;JavaScript 引擎不必按字面意思去做。)有时,一个范围可以有两个为其定义的环境记录(全局范围就是这样),但通常是一对一的。
推荐阅读
- javascript - 某些事件后不要在 Angular 中刷新视图
- pki - 无法清理 PKI,找不到错误文件:CADescription
- python - Python网页抓取:抓取后无法写入文件
- asn.1 - 字符串在 OSS ASN1 解码中被截断
- java - 为什么这会给我这个输出?
- lua - 如何将字符串转换为表格?
- azure - 从 Kotlin 和 ZIP 中的 blob azure 存储中下载几个目录
- reactjs - 单击按钮时效果函数无法呈现
- javascript - 我不能在函数上使用“this”
- node.js - 任何人都可以帮助我安装 React 吗?我收到了这个奇怪的错误