2016-11-25 2 views
6

Иногда в Интернете я вижу синтаксис, который мне незнакомо. Что-то вроде:Javascript «Equal Sequence» Значение

console.log = console.error = console.info = console.debug = console.warn = console.trace = function() {} 

Как эта «равная» последовательность работает?

Спасибо.

ответ

5

Оператор присваивания присваивает значение его левому операнду на основе значения его правого операнда.

Рассмотрим:

a = b = c = d = 5; 

Выражение решается справа налево так:

d = 5 и c = d (что 5), b = c (5) и так далее.

В вашем примере эти консольные методы все являются (re), определяемыми как пустая функция.


См.: MDN: Assignment Operators для получения дополнительной информации.

5

С назначением операции разрешаются справа налево. Таким образом, самое правое значение будет заселено во все предыдущие переменные.

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, которые при той же стоимость. Вывод здесь состоит в том, что вы можете присвоить одно значение двум переменным, и выражение будет оцениваться справа налево, так что это по сути означает назначение значений двух переменных отдельно. Однако это не означает, что перекодирование одного также изменит и другое. Наконец, посмотрите, что происходит с e и f. Им присваивается функция вместо значения, поэтому вы можете вызвать их так, как если бы они были функциями.

Краткая версия: выражение разрешается справа налево. Назначение осуществляется по значению, а не по ссылке, что означает, что изменение одного из значений переменных не повлияет на других. Наконец, если вы назначаете функцию своим переменным, вы можете использовать их имена для вызова функции, которая является их значением.