Почему данный код приводит к возникновению ошибки?
var a = 5
(function() {
// ...
})();
Если не ставить ;
там, где это требуется, то в некоторых ситуациях точки с запятой будут подставлены автоматически. Однако есть ситуации, в которых ;
подставлена не будет, и в итоге код будет обработан совсем не так, как планировалось.
В спецификации в разделе 7.9.2 есть пример, в котором ;
не будет подставлена, и который похож на пример из вопроса:
a = b + c
(d + e).print()
is not transformed by automatic semicolon insertion, because the parenthesised expression that begins the second line can be interpreted as an argument list for a function call:
a = b + c(d + e).print()
В примере из вопроса суть сводится к тому, что конструкция 5(function() {...})
воспринимается как вызов функции 5
и передача ей в качестве аргумента функции. ()
же в конце воспринимается как вызов результата выполнения 5
как функции
Пример того как это выполняется (5
заменено на f
, потому что не очень-то получится объявить функцию с именем в виде числа):
function f(func) {
func();
return function(number) {
console.log(number);
};
}
var a = f
(function() {
console.log("func");
})(10);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите, какое API можно использовать для захвата видео в Safari
При наведении всплывает подсказка с текстом,все отлично работает но необходимо, чтобы весь блок с картинкой позади затемнялся, при всплывании...
Для создания приложения с использованием yandex speech kitЕго использование предполагае запись аудиофайла в формате ogg или lpcm и отправкой его на сервер