2014-08-28 2 views
2

Может кто-то пожалуйста, объясните, почему JSLint принимает этот стиль:О поведении JSLint

(function() { /* .... */ }()); 

, но не любит это один:

(function() { /* .... */ })(); 

Я знаю, что JSLint имеет некоторые чрезвычайно строгие правила, но в по крайней мере, большинство из этих правил имеют (предположительно) какую-то цель. Я просто не могу понять, какова эта цель в этом конкретном случае.

(я не пытаюсь спорить здесь, я просто пытаюсь понять причину.)

+0

Не любит? Какую ошибку он дает? – Andy

+1

http: // jslinterrors.com/move-the-invocation-in-the-parens-that-содержать-функцию/ –

+0

Резюме ссылки, которую @PaoloMoretti поставил в своем комментарии: '' создатель JSLint - злобный человек, t нравится добавлять в него опции и хочет, чтобы все кодировались так же, как и в тех случаях, когда они действительно не имеют абсолютно никакой разницы. '' – RevanProdigalKnight

ответ

0

Хорошо, это почти точно такой же вопрос, как most recent jslint-tagged question before this one, который также просит о оборонительный ведущих полу- колоны. Не забудьте выполнить поиск внутри своих тегов, прежде чем спрашивать!

При этом мы дадим бесплатный пропуск - в другом вопросе нет принятого ответа, поэтому здесь вы идете. ; ^) (Тем не менее, мы должны закрыть один из них как обман.)

Вот почему Крокфорд говорит, что вторая версия лучше.

От http://javascript.crockford.com/code.html

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

Чтобы немного расширить, JavaScript не является, как известно, строго типизированным языком. Это не редкость толкать function в переменную, и, по сути, было бы более распространено толкать функцию в var, а не на значение от вызываемой немедленно анонимной функции.

var whatAmI = function() { return 5; }; // You're a function! 

против

var whatAmI = (function() { return 5;}()); // You're the number 5! 

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

Не увязывайте тех, кто жалуется, что это трудно. Они правы, и это хорошо!

В проекте достаточно большой, почему у вас есть, чтобы не согласиться с ним? Я никогда не видел, чтобы Крокфорд требовал чего-то, что было бы объективно неправильно. Все правила в JSLint: , возможно, хороших, а стандартизация кода в общих проектах - это очень хорошая вещь. Он учит вам хорошие (! Плохие?) Привычки бесплатно. Стоит играть.

Смежные вопросы