ES6模块范围

Kir*_*tov 22 javascript module ecmascript-6

我有代码:

// lib.js
var a = "a";
export var b = "b";

// main.js
console.log(a); // "a" variable is not available in a global scope
import {b} from "lib";
console.log(a); // is "a" variable available in a global scope or only in a module scope?
Run Code Online (Sandbox Code Playgroud)

我可以在模块导入后在全局范围内使用"a"变量,还是仅在模块范围内可用?ES6模块是否具有类似这样的工作原理:

// module    
exports.module1 = (function(){ var a = "a"; })(); // "a" variable is not available in a global scope
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 28

我可以在模块导入后在全局范围内使用"a"变量,还是仅在模块范围内可用?

它仅在声明的模块内可用.

ES6模块是否具有类似的工作原理:[...]

基本上是的.


ES6有这些范围,从"顶部"到"底部"的顺序:

  • 全球范围
  • 模块范围
  • 功能范围
  • 阻止范围

  • [关于模块的很好的解释(林克拉克@linclark)](https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/) (2认同)

Joa*_*sen 6

您可以globalThis.a = "a"在该模块加载后执行并访问它。请参阅:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis