現在、インスタンス変数を共有したいと考えています。たとえば、データベースに接続するには、main.js でデータベースがインスタンス化された後、データベースを使用する他のモジュールがデータベースを再度インスタンス化する必要があります。
例: main.js
リーリーユーザー.js
リーリー現時点では、redisApi 変数が未定義であることを示すエラー メッセージが報告されます。
しかし、変数の初期化に eval を使用するように切り替えた後は、状況が異なりました。
メイン.js
リーリー現時点では、他のモジュールは redisApi 変数を共有できます。
なぜ eval でこれができるのでしょうか? 誰か説明できますか?
迷茫2017-05-31 10:40:28
ここでは、Node.js のモジュールがどのようにロードされるかを理解する必要があります。
ブラウザと同様に、Node.js の実行環境には DOM ウィンドウ オブジェクトに似たグローバル オブジェクトがあります。
同様に、
コードの説明を直接見てください:
それをあなたのコードと比較することでそれを理解することができます。実際に効果があるのは、redisApi = new RedisApi();
,eval (
`let redisApi;`);
によって宣言された変数が別の独立したスコープにあり、実際にはアクセスできないということです。
黄舟2017-05-31 10:40:28
Eval コードは、組み込み eval 関数に提供されるソース テキストです。より正確には、組み込み eval 関数のパラメーターが文字列の場合、特定の呼び出しの ECMAScript プログラムとして扱われます。 eval は、そのプログラムのグローバル コード部分です。
これは es6 のオリジナルのテキストからの引用です。このように設定されているため、結果は得られますが、この方法でプレイすることは一般的に推奨されません。