在javascript es6中在脚本中编写全局const并在其他脚本中使用它的正确方法是什么?
T.J*_*der 11
您只需const在全球范围内使用:
const aGlobalConstant = 42;
Run Code Online (Sandbox Code Playgroud)
这创造了一个全球常数.它不是全局对象的属性(因为const,let并且class不会在全局对象上创建属性),但它是一个全局常量,可供在该全局环境中运行的所有代码访问.
但是,值得注意的是,趋势是摆脱全局变量,实际上甚至不再使用任何代码在全局范围内运行(尽管浏览器中的顶级脚本总是可以访问全局范围,兼容性).
例如:在NodeJS中,您的代码都没有在全局范围内运行; 所有内容(包括您通过node命令运行的主脚本)都位于NodeJS 模块环境中,该环境不是全局范围.因此在NodeJS中,上面的行不会创建全局,因为它的作用域是对模块的调用.要在NodeJS中创建真正的全局(通常不是必需的),您必须在全局对象上创建属性.但是如何访问全局对象?NodeJS调用你的代码this设置为一个空对象(而不是通常的松散模式默认值,this指的是全局对象),当然window在NodeJS中没有.答案:NodeJS为此提供了全局可用:global
// Define a global constant in NodeJS
Object.defineProperty(global, "aGlobalConstant", {
value: 42
});
Run Code Online (Sandbox Code Playgroud)
这是一个常量,因为默认情况下,通过Object.defineProperty它创建的属性是只读的.
ES2015的模块把它一步比的NodeJS:您不能创建一个全球性可言,除非环境有全球一样的NodeJS的global提供给你(在这种情况下,你可以做Object.defineProperty的事情).默认情况下,根据规范,没有这样的全局; 它只是定义它们的环境(window在浏览器上,global在NodeJS中......).并且ES2015模块中的顶级代码不会使用this引用全局对象的旧默认this值(具有undefinedES2015模块顶级范围的值)运行,因此您无法使用this它.