Почему такое выражение не выдаёт ошибку:
i=5,console.log(i)
а такое выражение выдаёт ошибку ?
var i=5,console.log(i)
такой синтаксис кода обычно в jquery-плагинах.
Как правильно составлять такие выражения через запятую?
к примеру чтобы можно ещё было добавить к вышеприведённому выражению функцию-обработчик
i=5, console.log(i),function test(){var test='test';alert(test);};
test();
это выражение выдаёт ошибку
В вашем примере есть два разных выражения, это оператор var
и оператор ,
(запятая). Поэтому рассматривать их надо отдельно друг от друга.
Оператор var позволяет определять переменные, при этом синтаксис позволяет определить сразу несколько, перечислив их через запятую. При этом значение может быть вычислено из сложных выражений.
var имя1 = значение1, имя2 = значение2, имя3, имя4, имя5 = значение5 ...
К примеру:
var a = 10,
b = 20,
c = a + b,
d = function test() { return c; },
e = d() * d()
Поэтому если сначала встретили слово var, то дальше запятая имеет отношение именно к нему.
И есть отдельно оператор ,
(запятая). Оператор "запятая" вычисляет оба операнда и возвращает значение второго, как правило он используется, когда хочется включить несколько выражений в то место, где должно быть одно (чаще всего объявление в цикле for).
1, 2 //-> 2
1, 2, 10 + 30 //-> 40
1, function test(){ console.log("test"); } //-> ƒ test(){ console.log("test"); }
Учитывая специфику его работы, то он не привяжет функцию к общему контексту и она не будет доступна по имени test()
. Видимо она привязывается к внутреннему контексту выполнения. Но вы можете ее вернуть и использовать.
var test = (1, function test(){ console.log("test"); });
test();
В коде:
i = 5, console.log(i)
запятая является оператором.
А в коде:
var i = 5, console.log(i)
запятая не является оператором, а является частью синтаксиса объявления переменных с помощью ключевого слова var
.
Синтаксис объявления переменных с помощью var
выглядит так:
var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
Видно, что он допускает только переменные и их значения.
Синтаксис оператора запятой выглядит так:
expr1, expr2, expr3...
Вообще мне казалось, что не стоит использовать оператор запятую слишком часто, так как это может привести к ухудшению читаемости. Также связанный вопрос на английском: When is the comma operator useful? .
В то же время оператор запятая часто используется в минифицированном коде, так как в некоторых случаях позволяет уменьшить размер кода.
Как правильно составлять такие выражения через запятую?
Сначала объявить все необходимые переменные, а потом в одной строчке через запятую производить с ними действия. При этом для функции тоже стоит объявить переменную, а при использовании запятой присвоить этой переменной значение — анонимную функцию:
var i, test;
i = 5, console.log(i), test = function() { console.log('test') };
test();
Но ещё раз напишу что в данном случае лучше не использовать оператор запятую, а использовать обычную точку с запятой и писать по выражению на одной строке.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте! Возникла проблема с плагином jQuery (самописка)Параметры, которые я записываю в переменную плагина при каждой новой инициализации...
Здравствуйте! Есть компонент lightbox в фреймворке Uikit, https://getuikitcom/docs/lightbox не совсем понятно как слушать события( Нужно при показе/перелистывание...
Добрый день, столкнулся с проблемой написал небольшой скрипт для проверки элементов массивов (проверка чтобы все жлементы первого массива...
Есть кнопкиКак узнать,то это кнопка? В классе присутствует "knopka"