Javascript var是我们声明全局变量和函数的唯一选项吗?
在本页上: 我发现使用var很重要,我们不能使用let和const来声明全局变量和函数,但我尝试使用let和const。所以我应该使用它们还是不推荐它们 以下是我运行的代码:Javascript var是我们声明全局变量和函数的唯一选项吗?,javascript,node.js,constants,var,let,Javascript,Node.js,Constants,Var,Let,在本页上: 我发现使用var很重要,我们不能使用let和const来声明全局变量和函数,但我尝试使用let和const。所以我应该使用它们还是不推荐它们 以下是我运行的代码: let a; globalThis.a = 3; console.log(globalThis); 以下是输出: 因此,您可以清楚地看到添加了没有任何错误的。那么,我应该继续使用这个还是不推荐使用这个呢?我会尝试解释一下。一般来说,无论编程语言、环境和用例如何,保持变量/数据范围尽可能窄始终是一种好的做法。这有很多原因
let a;
globalThis.a = 3;
console.log(globalThis);
以下是输出:
因此,您可以清楚地看到添加了没有任何错误的。那么,我应该继续使用这个还是不推荐使用这个呢?我会尝试解释一下。一般来说,无论编程语言、环境和用例如何,保持变量/数据范围尽可能窄始终是一种好的做法。这有很多原因,从安全性到简单的名称空间污染和代码组织 我看到您正处于JavaScript旅程的开始。当您开始创建更复杂的应用程序时,您将发现一些模式,这些模式几乎迫使您将变量保持在本地。这是通过在JavaScript中使用函数作用域实现的 在浏览器中,模块和函数外部的代码(实际上它们与您将看到的相同)被认为是全局范围内的代码,使用
window
或其他语法(self
,frames
,this
有时)始终可以访问全局范围。然而,在其他环境中,如NodeJS,由于两个主要原因,这将不起作用。第一个是所有代码都在模块内执行。第二个原因是上面的一些语法甚至不存在
在节点中,您可以使用global
访问全局范围。但是,即使使用var
,创建的变量也将始终是本地变量,因为模块封装在如下函数中:
(函数(导出、要求、模块、文件名、目录名){
//模块代码实际上就住在这里
});
因此,即使是“exports”、“require”、“module”、“__filename”、“__dirname”等看似全局的变量,对于每个模块来说实际上也是局部的
global引入此
是为了创建跨多个环境访问全局范围的一致方式
最后,我建议您不要使用
var
,而是使用const
和let
,并以一种理想的方式组织代码,即在全局范围内不公开任何变量。您有一个窗口
对象,为什么要对此进行标记?之所以将其标记为nodejs,是因为这个问题与我们运行JavaScript的每个环境都相关。您的问题是什么?我的问题是,建议只使用var,或者没有这样的边界现在没有什么理由使用var
now*。如果支持,请始终使用let
和const
。我不理解与模块相关的第一部分,但在学习模块时我会理解它,但我知道第二部分不应使用var,我感谢您的回答