Какой странный синтаксис?

Я нашел неизвестную для меня конструкцию кода на сайте JQuery. После некоторого форматирования это выглядит так:

function (a,c) {
    c==null && (c=a,a=null);
    return arguments.length>0
        ? this.bind(b,a,c) 
        : this.trigger(b)
}

Что означает первая строка функции? Это какой-то трюк или стандартная конструкция JS-кода?

Ответы

Ответ 1

Это трюк, который использует логическую оценку короткого замыкания только для выполнения второй половины, если первая оценивает значение true. Perl имеет это обычно:

<something> or die

где, если первый оператор завершился неудачно, программа заканчивается.

Прочитайте его как

if (c == null) { c = a; a = null; }

Ответ 2

Это уродливый способ написать

if(c==null) {
  c = a;
  a = null;
}

Это использует тот факт, что вторая часть логического && будет выполняться, если и только если первая часть оценивается как true.

Ответ 3

В выражении используются две функции JavaScript:

В результате выражение равносильно:

if (c == null) {
    c = a
    a = null
}