Нужна ли нам точка с запятой после объявления функции? - программирование

Нужна ли нам точка с запятой после объявления функции?

Возможный дубликат:
JavaScript: Когда следует использовать точку с запятой после фигурных скобок?

Кто-то добавил точку с запятой после объявления функции, но кто-то не. Является ли хорошей практикой добавлять точку с запятой после объявления функции?

function test(o) {
}

function test(o) {
};
4b9b3361

Ответ 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 ...