2017-12-02 10 views
0

私が以前の投稿と記事から得たことは、エクスポートオブジェクトがglobalオブジェクトにあることです。私は私を混同している、このコードに出くわした:NodeJSのvar exports = module.exports = {}

let blue = 'blue' 
let red = 'red' 

var exports = module.exports = { 
    red, 
    blue 
}; 

このコードは、その後、エクスポートされるオブジェクトに設定されますexportsという変数にmodule.exportsを設定します。

私はこの構文によりしかし混乱しています:

例1:正確にこの作業を行いどのよう

var exports = module.exports = {} 

?通常JSでは、変数を2回assingすることはできません。例えば、これはエラーを与える:

例2:例2のコードはありませんしながら、

let foo = 5 = 4; 

はどのように例1のコードは、エラーを与えていないのでしょうか?

let foo = (5 = 4); 

そして5は変数ではないので、あなたはそれにコンテンツを割り当てるカント:その右から左に解析された原因

+0

これは 'exports =(module.exports = {});'です。これは、オブジェクトリテラルから作成されたオブジェクトを両方のターゲットに割り当てます。 – Bergi

答えて

2
let foo = 5 = 4; 

。しかし、それは識別子で動作します:

let bar; 
let foo = bar = 5; 
1

あなたの行の解釈は間違っています。実際に起こっている何

This code sets module.exports to a variable called exports which then gets set to an object which gets exported.

{ red, blue }module.exportsに割り当てられており、その同じ値({ red, blue })がexportsに割り当てられていることです。似た構文(C、C++、C#、Java(登録商標))someAssignableThing = someValueとJavaScriptとその他の言語で

表現として扱われ、あなたがあなたと一緒に多くのように、他の表現やチェーンのサブ部分としてa = bを使用することができます欲しいです。

someAssignableThing = someValueは、「someValue~someAssignableThingを割り当て、値をsomeValueと評価する」と同じです。

そう声明:

a = b = c = d = e = 5; 

が値5aに、bcd、およびeを割り当てます。

=の左側に値を割り当てることができない文法エラーです。そのため、2番目のケースでエラーが発生します(値を5に割り当てることはできません)。

関連する問題