suchen

Heim  >  Fragen und Antworten  >  Hauptteil

node.js – Fragen zur Auswertung in nodejs

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?

大家讲道理大家讲道理2813 Tage vor665

Antworte allen(2)Ich werde antworten

  • 迷茫

    迷茫2017-05-31 10:40:28

    这里需要理解下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;`);声明的变量是在另外一个独立的作用域中,其实是无法访问到的。

    Antwort
    0
  • 黄舟

    黄舟2017-05-31 10:40:28

    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的原文引用,规范就是这么定的,所以有你这样的结果;不过一般不推荐这么玩;

    Antwort
    0
  • StornierenAntwort