ES6模块范围

时间:2015-05-17 14:37:23

标签: 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?

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

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

3 个答案:

答案 0 :(得分:22)

  

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

它仅在声明的模块中可用。

  

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

基本上是的。

ES6有这些范围,从" top"到"底部":

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

答案 1 :(得分:0)

假设您正在将某些内容导出到另一个模块。您导出var b = 'b'的示例,但您没有导出var a = 'a'。这意味着您只能在var a = 'a'中使用lib.js,它在声明的模块中是本地的,并且只能在该模块中使用。 var a的范围限定为lib.js模块。

答案 2 :(得分:0)

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