Ответ 1
TL; DR: Без точки с запятой выражение вашей функции может превращаться в немедленное вызывается функциональное выражение в зависимости от кода, который следует за ним.
Автоматическая точка с запятой - боль. Вы не должны полагаться на это:
var tony = function () {
console.log("hello there"); // Hint: this doesn't get executed;
};
(function() {
/* do nothing */
}());
Versus:
var tony = function () {
console.log("hello there"); // Hint: this gets executed
}
(function() {
/* do nothing */
}());
Во втором (плохом) примере точка с запятой не вставлена, потому что следующий код может иметь смысл. Таким образом, анонимная функция, которую вы ожидали назначить на tony, мгновенно вызывается каким-либо другим аргументом, а tony
получает значение возврата, которое вы ожидали tony
, что на самом деле не так, как вы хотели.