有时在互联网上,我看到一种对我来说很奇怪的语法。类似的东西:
console.log = console.error = console.info = console.debug = console.warn = console.trace = function() {}
这个“平等”的序列如何运作?
感谢。
答案 0 :(得分:5)
通过分配,操作将从右向左解决。因此,最右边的值将填充到所有前面的变量中。
答案 1 :(得分:5)
赋值运算符根据其右操作数的值为其左操作数赋值。
考虑:
a = b = c = d = 5;
表达式从右到左解析,所以:
d = 5
和c = d
(即5),b = c
(5)等等。
在您的示例中,这些控制台方法都被(重新)定义为空函数。
有关详细信息,请参阅:MDN: Assignment Operators。
答案 2 :(得分:1)
您所描述的内容可以通过类比使用更简单的示例轻松解释:
// Normal variable assignment
var a, b;
a = 15;
b = 15;
console.log("a: "+a+" , b: "+b);
// Assing the same value to two variables
var c, d;
c = d = 15;
console.log("c: "+c+" , d: "+d);
// Assign the same value to two variables and make it a function
var e, f;
e = f = function(){ console.log("Hi!"); };
// Call both of the variables' functions
e(); f();

从变量a
和b
开始,然后转到给定相同值的c
和d
。这里要说的是,您可以为两个变量分配相同的值,并且表达式将从右到左进行评估,因此实际上它就像分配两个变量'价值分开。但是,这并不意味着chaning one也会改变另一个。
最后,看看e
和f
会发生什么。这些被分配了一个函数而不是一个值,因此您可以将它们称为函数。
简短版:表达式从右向左解析。赋值是按值而不是通过引用,这意味着更改其中一个变量'价值不会影响他人。最后,如果为变量分配函数,则可以使用它们的名称来调用它们的值函数。