Ответ 1
Это оператор запятой. Он оценивает свой левый операнд, отбрасывает результат, оценивает свой правый операнд и принимает его в качестве значения результата. Он ассоциативен слева направо, поэтому a, b, c
оценивают a
, затем b
, затем c
и принимают результат c
качестве значения.
В вашем примере это точно так:
myfunc();
myobj.myvar = someobj.prop;
return myobj;
Некоторые люди действительно предпочитают делать что-то на одной линии, даже если для этого нет объективной причины. В приведенном вами примере нет никакой пользы, и на самом деле это сбивает с толку, поскольку похоже, что первые два бита относятся к значению, которое в конечном итоге будет возвращено, а это не так. (Я писал, что до того, как вы сказали нам, что это минимизированный код; очевидно, что неясность для людей - это проблема только исходного кода, а не минимизированного кода.)
Поскольку вы сказали, что это минификатор: очень малая возможная выгода, которую мог бы получить минификатор, есть, если он является частью условного блока: он может сохранить один или два символа. Если мы предположим, что длинная форма выглядела так:
if (someCondition) {
myfunc();
myobj.myvar = someobj.prop;
return myobj;
}
... используя оператор запятой, минификатор может сделать это (63 символа):
if(someCondition)return myfunc(),myobj.myvar=someobj.prop,myobj
... а не это (65 символов):
if(someCondition){myfunc();myobj.myvar=someobj.prop;return myobj}
... без изменения функциональности кода, если ниже следует }
или какой-либо другой соответствующий символ (или конец файла) для запуска автоматической вставки точки с запятой в конце. В противном случае это будет необходимо ;
на первом, но это все еще сохраняет один символ.