NodeJS

时间:2017-12-02 16:08:58

标签: javascript node.js

我从之前的帖子和文章中得到的是export对象位于global对象上。我遇到了这个困扰我的代码:

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

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

此代码将module.exports设置为名为exports的变量,然后将其设置为导出的对象。

但是我对此语法感到困惑:

例1:

var exports = module.exports = {}

这是如何工作的?因为通常在JS中你不能将变量赋值两次。例如,这会产生错误:

例2:

let foo = 5 = 4;

示例1中的代码如何在示例2中的代码中没有出错?

2 个答案:

答案 0 :(得分:2)

let foo = 5 = 4;

因为它从右向左解析:

let foo = (5 = 4);

并且5不是变量,因此您无法为其分配内容。但它适用于标识符:

let bar;
let foo = bar = 5;

答案 1 :(得分:1)

你对这条线的做法的解释是不正确的。

  

此代码将module.exports设置为名为exports的变量,然后将其设置为导出的对象。

实际发生的是,{ red, blue }的值已分配给module.exports,然后将相同的值({ red, blue })分配给exports

在JavaScript和其他语法相似的语言(C,C ++,C#,Java)someAssignableThing = someValue被视为表达式,您可以使用a = b作为子语言 - 根据需要将其他表达和链的部分组合在一起。

表达式someAssignableThing = someValue等同于“将someValue指定给someAssignableThing并评估为值someValue”。

所以声明:

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

会将值5分配给abcde

=左侧有一些无法赋值的语法错误,这就是第二种情况下出错的原因(您无法为{{1}分配值})。