Подтвердить что ты не робот

Пробел после имени функции неправильный?

Я использовал JSLint, и у меня появилась ошибка для помещения пробела после имени функции. Почему это плохо?

function coolness () {
    var hi = "this";
}

ОШИБКА: проблема с символом линии 1 19: Неожиданное пространство между "прохладой" и "(".

4b9b3361

Ответ 1

JSLint не столько проверяет синтаксис JavaScript, сколько проверяет стиль JavaScript. Руководства по стилю, которые он использует, написаны Дугласом Крокфордом.

Некоторые люди не согласны с его стилевыми решениями, некоторые - нет. Они не закон, и вы не обязаны следовать им. Существуют альтернативные линзы JS, такие как JSHint.

Конкретное правило, с которым вы сталкиваетесь, находится здесь:

Между именем функции и (левой круглой скобкой) списка параметров не должно быть пробела.

JavaScript не чувствителен к пробелам. Вы можете добавить это место, если вам станет лучше. (Это не стандартно, однако.)

Ответ 2

По словам Крокфорда,

Для именованных функций НЕ вставляйте пробел между именем функции и круглыми скобками:

function doStuff() {
  //stuff here
}

Для анонимных функций вставьте пробел между ключевым словом function и круглыми скобками:

function () {
  //stuff here
}

Ответ 3

Проверьте приведенные ниже сценарии кода javascript, и вы найдете ответ.

http://crockford.com/javascript/code.html#function

Не должно быть пробела между именем функции и ((в левой скобке) списка параметров. Между ними должно быть одно пространство (правая скобка) и {(левая фигурная скобка), которая начинает утверждение тело. Само тело имеет отступы в четыре пробела. } (Правая фигурная скобка) выровнена с линией, содержащей начало объявления функции.

Пример для функции:

function outer(c, d) {
    var e = c * d;

    function inner(a, b) {
        return (e * a) + b;
    }

    return inner(0, 1);
 }

Пример анонимной функции:

div.onclick = function (e) {
    return false;
};

Ответ 4

С технической точки зрения, ваш код вполне допустимо, хотя некоторые стандарты кода стиля диктуют, что не должно быть такое пространство (например, тот, который @Bodgan цитируется).

На самом деле, когда вы сжимаете свой код (используя один из многих инструментов, таких как YUI Compressor или Google Closure Compiler) эти пространства полностью удалены - в том числе и те, до/после фигурных скобок, как цитируется @Bodgan. И это действительно JS, конечно.

Ответ 5

Я думаю, что если ваш проект хочет иметь только один стиль (function name() {...} VS function name() {...}), первый вариант хуже, потому что:

  1. Во многих общепринятых рекомендациях по стилю кодирования нет пробела между именем функции и левой круглой скобкой в объявлении функции. (Это означает, что делать наоборот - вводить подразделения)

Например

C++:

void main() {
}

PHP:

function run() {
}
  1. Я думаю, что вызов функции и объявление функции недостаточно, чтобы нуждаться в двух разных стилях (# 1). Это не следуя принципу KISS.

    Например: в нескольких случаях я копирую шаблон объявления функции, потому что функция имеет много параметров (может не быть хорошего подсказки для автозаполнения), и вставляю его в позицию кода, чтобы превратить его в вызов функции. Если есть два стиля, мне понадобится дополнительная осторожность (предположим, нет линтера), чтобы удалить лишний пробел между functionName (longParameterList...).

Примечания:

# 1 - некоторые мнения приводят доводы в пользу более легкого поиска в файлах объявлений функций, что я не считаю достаточно убедительной причиной для добавления дополнительного стиля, который нужно помнить при кодировании.