Нужна ли нам точка с запятой после объявления функции?
Возможный дубликат:
JavaScript: Когда следует использовать точку с запятой после фигурных скобок?
Кто-то добавил точку с запятой после объявления функции, но кто-то не. Является ли хорошей практикой добавлять точку с запятой после объявления функции?
function test(o) {
}
function test(o) {
};
Ответы
Ответ 1
Объявление функции не нуждается (и не должно иметь) точки с запятой после нее:
function test(o) {
}
Однако если вы напишите функцию как выражение, как инициализатор переменной ниже, тогда оператор должен заканчиваться точкой с запятой, как и любой другой оператор:
var a = function test(o) {
};
Смотрите больше о конструкторе против объявления (оператора) против выражения.
Ответ 2
Что на самом деле происходит там, вы добавляете пустой оператор после этой функции.
function test (o) { return o; };
можно считать похожим на:
var test = 0;;
Эта вторая точка с запятой не является ошибкой per se. Браузер рассматривает это как утверждение, где абсолютно ничего не произошло.
Здесь нужно иметь в виду две вещи.
Это означает ТОЛЬКО для функций-деклараций и блоков управления (для/if/while/switch/etc).
Объявление функций должно быть определено в нижней части области действия, поэтому вы не сталкиваетесь с такими проблемами:
function test () {}
(function (window, document, undefined) { /* do stuff */ }(window, document));
Поскольку браузер предполагает, что вы имеете в виду function test() {}(/*return value of closure*/);
Это ошибка. Очень плохая и неприятная ошибка, которую очень легко упустить.
Но это нормально, потому что функции-декларации могут идти под оператором return и по-прежнему работают нормально.
Так что даже если вы хотите пойти:
function doStuff () {
return (function () { /*process stuff*/ test(); }());
function test () {}
}
Это будет работать просто peachy.
Ответ 3
Нет.
Вам не нужны точки с запятой при определении такой функции.
Однако, если вы определите такую функцию:
var test = function (o) {
}
Это не строго необходимо, но вы можете использовать их, особенно если вы поместите функцию в одну строку.
Первый способ определяет функцию, но второй способ назначает функцию переменной и, следовательно, является выражением. Большинство операторов разделены точкой с запятой. Определяющие функции можно рассматривать как общий контрпример, так как не многие люди их используют.
Ответ 4
Точки с запятой и функциями:
function test(o) {
// body
} // semicolon no
var test = function (o) {
// body
}; // semicolon yes
См. JSLint для форматирования кодовых вопросов.
Ответ 5
В браузере это не имеет значения. Для материи семантики это имеет значение только в том случае, если вы прототипируете функцию или используете оператор функции.
function stuff(stuff) {
alert(stuff);
} //don't need a semicolon
Object.prototype.stuff = function(stuff) {
alert(stuff);
}; //need a semicolon
var stuff = function(stuff) {
alert(stuff);
}; //need a semicolon
Ответ 6
Точка с запятой не требуется при определении функции, но включение ее также не является ошибкой.
Одно из исключений, если вы используете обертки функций и передаете параметры, вы нуждаетесь, чтобы добавить точки с запятой между ними, например:
(function(v){alert(v)})('1');
(function(s){alert(s)})('0')
... Otherwise forget about them ...