Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript var是我们声明全局变量和函数的唯一选项吗?_Javascript_Node.js_Constants_Var_Let - Fatal编程技术网

Javascript var是我们声明全局变量和函数的唯一选项吗?

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); 以下是输出: 因此,您可以清楚地看到添加了没有任何错误的。那么,我应该继续使用这个还是不推荐使用这个呢?我会尝试解释一下。一般来说,无论编程语言、环境和用例如何,保持变量/数据范围尽可能窄始终是一种好的做法。这有很多原因

在本页上:

我发现使用var很重要,我们不能使用let和const来声明全局变量和函数,但我尝试使用let和const。所以我应该使用它们还是不推荐它们

以下是我运行的代码:

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,我感谢您的回答