Я использовал JSLint, и у меня появилась ошибка для помещения пробела после имени функции. Почему это плохо?
function coolness () {
var hi = "this";
}
ОШИБКА: проблема с символом линии 1 19: Неожиданное пространство между "прохладой" и "(".
Я использовал JSLint, и у меня появилась ошибка для помещения пробела после имени функции. Почему это плохо?
function coolness () {
var hi = "this";
}
ОШИБКА: проблема с символом линии 1 19: Неожиданное пространство между "прохладой" и "(".
JSLint не столько проверяет синтаксис JavaScript, сколько проверяет стиль JavaScript. Руководства по стилю, которые он использует, написаны Дугласом Крокфордом.
Некоторые люди не согласны с его стилевыми решениями, некоторые - нет. Они не закон, и вы не обязаны следовать им. Существуют альтернативные линзы JS, такие как JSHint.
Конкретное правило, с которым вы сталкиваетесь, находится здесь:
Между именем функции и (левой круглой скобкой) списка параметров не должно быть пробела.
JavaScript не чувствителен к пробелам. Вы можете добавить это место, если вам станет лучше. (Это не стандартно, однако.)
Для именованных функций НЕ вставляйте пробел между именем функции и круглыми скобками:
function doStuff() {
//stuff here
}
Для анонимных функций вставьте пробел между ключевым словом function
и круглыми скобками:
function () {
//stuff here
}
Проверьте приведенные ниже сценарии кода 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;
};
С технической точки зрения, ваш код вполне допустимо, хотя некоторые стандарты кода стиля диктуют, что не должно быть такое пространство (например, тот, который @Bodgan цитируется).
На самом деле, когда вы сжимаете свой код (используя один из многих инструментов, таких как YUI Compressor или Google Closure Compiler) эти пространства полностью удалены - в том числе и те, до/после фигурных скобок, как цитируется @Bodgan. И это действительно JS, конечно.
Я думаю, что если ваш проект хочет иметь только один стиль (function name() {...}
VS function name() {...}
), первый вариант хуже, потому что:
Например
C++:
void main() {
}
PHP:
function run() {
}
Я думаю, что вызов функции и объявление функции недостаточно, чтобы нуждаться в двух разных стилях (# 1). Это не следуя принципу KISS.
Например: в нескольких случаях я копирую шаблон объявления функции, потому что функция имеет много параметров (может не быть хорошего подсказки для автозаполнения), и вставляю его в позицию кода, чтобы превратить его в вызов функции. Если есть два стиля, мне понадобится дополнительная осторожность (предположим, нет линтера), чтобы удалить лишний пробел между functionName (longParameterList...)
.
Примечания:
# 1 - некоторые мнения приводят доводы в пользу более легкого поиска в файлах объявлений функций, что я не считаю достаточно убедительной причиной для добавления дополнительного стиля, который нужно помнить при кодировании.