这是我一直想知道的问题。假设我有一个Express应用程序。我将这个导出写在它自己的文件中:
// my-var.js
export const myVar = new Thing();
接下来我创建服务器并访问该变量:
// index.js
import { myVar } from './my-var';
import { myRoutes } from './my-routes';
function startServer() {
myVar.doSomething(); /* 1 */
const app = express();
app.use('/', myRoutes);
app.listen(port, () => {});
}
最后,我的路由也使用了这个变量:
// my-routes.js
import { Router } from 'express';
import { myVar } from './my-var';
const router = new Router();
router.get((req, res) => {
myVar.doSomething(); /* 2 */
res.json({});
});
所以我的问题是:.1和.2引用的是同一个变量吗?还是已经实例化了两次?我认为每次导入文件时都会进行实例化,因为导入文件会运行该文件中的代码。所以
myVar = new Thing();
每次运行该文件时都会执行。
my-var.js
中添加了一个console.log
,即使我在两个不同的位置导入该文件,它也只打印了一次。 - Troncoso