Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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:如何从另一个导入的模块内部访问导入的模块变量?_Javascript_Javascript Import - Fatal编程技术网

Javascript:如何从另一个导入的模块内部访问导入的模块变量?

Javascript:如何从另一个导入的模块内部访问导入的模块变量?,javascript,javascript-import,Javascript,Javascript Import,我有一个脚本,可以导入许多不同的文件,如下所示: <script type="module"> import * as A from '...'; import * as B from '...'; import * as C from '...'; 如果我在所有其他导入之后添加导入,如: <script type="module"> import * as A from '...'; import * as B from '..

我有一个脚本,可以导入许多不同的文件,如下所示:

<script type="module">
import * as A from '...';
import * as B from '...';
import * as C from '...';
如果我在所有其他导入之后添加导入,如:

<script type="module">
import * as A from '...';
import * as B from '...';
import * as C from '...';
import * as my from 'myfile.js'; 
我还可以从模块内部访问全局变量,例如:

import * as A from ....
console.log(A);
import * as B from ...
console.log(B);
import * as my from 'myfile.js'
myfile.js:

var init = (function (t) {

    console.log(t);

})(window.innerWidth);

export { init };
这个打印窗口宽度

我正在寻找类似的功能:

var init = (function (t) {

    console.log(t);

})(A);

export { init };

回调函数非常类似于导入我的模块,然后调用一个函数并将一个作为参数传递给它,我可以在没有回调的情况下完成它。

你不能。模块解析的实现完全是为了不拖拉全局范围,避免程序员问“这个变量还存在吗?”。 因此,您可以使用旧样式的JavaScript,禁用模块系统。不要将“myfile”用作模块,而是将其用作全局导入:

<script src="myfile.js"></script>

另外,您正在混合新旧语法

您正在将它们作为一个组件导出,我猜是使用{}括号进行初始化。如果要将它们作为组件导出,则必须在导出的模块旁边使用默认关键字。尝试导出默认值{init}

在JavaScript中,作用域由代码块、函数和模块创建。 因此,在模块外部无法访问模块变量(除非使用export显式导出)

如果您想在myFile.js中使用A、B、C,那么应该在
myFile.js中导入它们

所以
myFile.js
应该是:

import*作为从“…”导入;
将*作为B从“…”导入;
将*作为C从“…”导入;
var init=(函数(){
控制台日志(A、B、C);
})();
导出{init};

这里有一些关于

变量导入后立即退出的有用文章,如果这很重要的话。如果I console.log A、B、C紧跟在它们各自的导入语句之后,它们将被打印出来。你是说我不能访问模块范围之外的任何东西?你太自信了!我不会的。是,您无法访问模块范围之外的任何内容。这是模块的主要目的我很有信心,因为我运行代码-请参阅我的编辑-并且它可以工作。
var init = (function (t) {

    console.log(t);

})(A);

export { init };
<script src="myfile.js"></script>
var init = function (cb) {
    cb();
};

// use:
import {init} from ...
init(() => console.log(A,B,C));