我从之前的帖子和文章中得到的是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中的代码中没有出错?
答案 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
分配给a
,b
,c
,d
和e
。
=
左侧有一些无法赋值的语法错误,这就是第二种情况下出错的原因(您无法为{{1}分配值})。