То, что вы описали можно легко объяснить по аналогии с использованием более простой пример:
// 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
. Им присваивается функция вместо значения, поэтому вы можете вызвать их так, как если бы они были функциями.
Краткая версия: выражение разрешается справа налево. Назначение осуществляется по значению, а не по ссылке, что означает, что изменение одного из значений переменных не повлияет на других. Наконец, если вы назначаете функцию своим переменным, вы можете использовать их имена для вызова функции, которая является их значением.