Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Js, запятая вместо точки запятой

#javascript


Почему такое выражение не выдаёт ошибку:  

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();


это выражение выдаёт ошибку
    


Ответы

Ответ 1



В вашем примере есть два разных выражения, это оператор 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();

Ответ 2



В коде: 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(); Но ещё раз напишу что в данном случае лучше не использовать оператор запятую, а использовать обычную точку с запятой и писать по выражению на одной строке.

Комментариев нет:

Отправить комментарий