首页 > 解决方案 > javascript中范围和命名空间有什么区别

问题描述

大家好。实际上我是新学 Javascript 的。我在 javascript 中阅读了有关范围的信息。然后我在某个地方读到了 Js 中的命名空间,我想知道命名空间是否与作用域完全相同,所以我搜索了但结果只是针对 python 进行了解释,我不知道它们在 js 中是否相同。

有人会解释 js 中范围和命名空间之间的区别吗?

我对范围的定义:范围是编程语言中的一个概念,可以帮助我们防止变量污染。这意味着我们控制代码中变量和函数的可访问性。js 是一种函数作用域语言,这意味着如果我们创建新函数,就会创建新作用域。我们可以在新关键字let , const的帮助下声明块作用域而不是函数作用域变量和函数

标签: javascriptscopenamespacesgloballocal

解决方案


“命名空间”仅在 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 引擎不必按字面意思去做。)有时,一个范围可以有两个为其定义的环境记录(全局范围就是这样),但通常是一对一的。


推荐阅读