Должен ли я беспокоиться о «пропущенной точке с запятой» в JSLint? - PullRequest
3 голосов
/ 10 декабря 2010

У меня есть следующее:

$.ajaxSetup({beforeSend:function(a){a.setRequestHeader("Accept","text/javascript")},cache:false});

JSLint говорит мне: «Проблема в строке 1, символ 83: отсутствует точка с запятой»

Согласны ли вы?Я добавил это, но когда я использую YUI Compressor, он удаляет его?

Спасибо

Ответы [ 5 ]

5 голосов
/ 10 декабря 2010

JSLint ранит ваши чувства.

- Дуглас Крокфорд

И в 90% случаев он больше ничего не делает, он может жаловаться на пропущенную точку с запятой, но код по-прежнему работает нормально, поскольку он технически не требуется в этой позиции, поэтому компрессор YUI удаляет его для сохранения байта. 1009 *

4 голосов
/ 10 декабря 2010

JSLint пытается обнаружить потенциальные ошибки, как предупреждающие знаки.Как таковой он должен использоваться для рабочего кода и несжатого кода .

3 голосов
/ 10 декабря 2010

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

Причиной проблем могут быть дополнительные точки с запятой, например,

function a() {

   return // <-- semi colon is inserted here, terminating the line.
     {
         abc: '???'
     }
}

alert(a()); // undefined

Я всегда явно добавляю свои точки с запятой и делаю отступ в стиле BSD KNF .

Не беспокойтесь о том, что делает компрессор - если ваш код работает нормально, все хорошо.

Обновление

Pst указывает в комментариях (ура), что ASI не является проблемой выше - грамматика return предполагает, что значение будет сразу после него. Тем не менее, я думаю, что ASI все еще может быть проблемой - если каждый \n получает ;, предшествующий ему автоматически.

Я привел еще один пример того, как ASI является PITA.

var a = function(b) {

    b.call();  

};

(function() {
    c = 'hello',
    a

    (function() {
        alert('hello')  
    })

})();

См. На jsFiddle .

Код выглядит довольно глупо (почему там переменная a)?

Новичок может не знать о var переменных области видимости и может создать список из двух переменных, подобных этой. Затем они могут заключить функцию в скобки (этот человек все еще учится:)).

В приведенном выше примере функция будет отправлена ​​на a() и выполнена.

0 голосов
/ 10 декабря 2010

Здесь требуется версия для JSLint

$.ajaxSetup({beforeSend:function(a){a.setRequestHeader("Accept","text/javascript");},cache:false});

Примечание: я добавил;для вызова функции setRequestHeader.

0 голосов
/ 10 декабря 2010

Точка с запятой не требуется для правильного javascript, но jslint помогает вам найти потенциальные ошибки и не обязательно сломанный javascript. Вы можете спокойно игнорировать эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...