node.js – Fragen zur Auswertung in nodejs
大家讲道理
大家讲道理 2017-05-31 10:38:28
0
2
621

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?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

Antworte allen(2)
迷茫

这里需要理解下Node.js中的模块是如何被加载的。
和浏览器类似,Node.js的执行环境中有一个global对象,类似DOM的window对象。
同理,
直接看代码解释:


//module1.js
console.log(global.testStr)//undefined
testStr = '123';//!!关键点!!,这等于是给全局对象设置了一个名为testStr属性。
console.log(global.testStr)//123
var test = function () {
    console.log(testStr);
}

exports.test = test;

//index.js
require('./module1.js')

console.log(testStr)
//输出:123

所以对照到你这段代码就可以理解了,实际在生效的是redisApi = new RedisApi();eval (`let redisApi;`);声明的变量是在另外一个独立的作用域中,其实是无法访问到的。

黄舟

Eval code is the source text supplied to the built-in eval function. More precisely, if the parameter to the built-in eval function is a String, it is treated as an ECMAScript Program. The eval code for a particular invocation of eval is the global code portion of that Program.

这是es6的原文引用,规范就是这么定的,所以有你这样的结果;不过一般不推荐这么玩;

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!