Ich möchte derzeit eine Instanzvariable teilen. Um beispielsweise eine Verbindung zu einer Datenbank herzustellen, müssen andere Module, die die Datenbank verwenden möchten, diese erneut instanziieren, nachdem sie in main.js instanziiert wurde.
Zum Beispiel main.js
let redisApi;
redisApi = new RedisApi();
user.js
console.log(redisApi);
Zu diesem Zeitpunkt wird eine Fehlermeldung gemeldet, die darauf hinweist, dass die redisApi-Variable undefiniert ist!
Aber nachdem ich dazu übergegangen bin, eval zum Initialisieren von Variablen zu verwenden, war es anders
main.js
eval (`let redisApi;`);
redisApi = new RedisApi();
Zu diesem Zeitpunkt können andere Module die redisApi-Variable gemeinsam nutzen.
Warum eval das kann, kann mir das jemand erklären?
这里需要理解下Node.js中的模块是如何被加载的。
和浏览器类似,Node.js的执行环境中有一个global对象,类似DOM的window对象。
同理,
直接看代码解释:
所以对照到你这段代码就可以理解了,实际在生效的是
redisApi = new RedisApi();
,eval (
`let redisApi;`);
声明的变量是在另外一个独立的作用域中,其实是无法访问到的。这是es6的原文引用,规范就是这么定的,所以有你这样的结果;不过一般不推荐这么玩;