Проблема JSLint с "окном" в качестве глобальной переменной

Поэтому я использую JSLint, чтобы попытаться обнаружить ошибки. Я отключаю некоторые параметры, которые мне не нравятся, но я не вижу возможности включить глобальную переменную window. Ну, есть опция Yahoo Widget, но это перебор.

Что связано с использованием "окна", почему JSLint говорит, что это вызывает ошибки?

Ответ 1

/*jslint browser: true*/

Является правильным решением для этого.

2017-07-07: Документация JSLint теперь говорит:

browser... Он не снабжает себя или окно; вам придется запросить эти псевдонимы ужасного глобального объекта самостоятельно.

и

Директива/global/может использоваться только в том случае, если выбрана опция "Предпочесть выбор браузера".

Итак, теперь вам нужно будет использовать:

/* jslint browser */
/* global window */

Ответ 2

Просто сделайте комментарий в своем script следующим образом:

/*global window */

... your script goes here

В этом комментарии JSLint укажет, что window определяется где-то еще.

Смотрите: http://www.JSLint.com/lint.html,

JSLint также распознает комментарий /* global */, который может указывать JSLint, что переменные, используемые в этом файле, были определены в других файлах. Комментарий может содержать список имен, разделенных запятыми. Каждое имя может сопровождаться двоеточием и либо истинным, либо ложным, true указывает, что переменной может быть присвоен этот файл, а false, указывающий, что присвоение не разрешено по умолчанию.

Если вы хотите, чтобы окно было глобальным по умолчанию без необходимости применения комментария к вашему script, вы можете добавить predef:["window"] в параметр литерала объекта внутри функции JSLINT вашего локального файла jslint.js.

Кстати, я использую predef:["$","window"], чтобы иметь jQuery глобальный.

Update:

Этот ответ был верным в 2009 году. На данный момент вы должны использовать решение /*jslint browser: true*/, предоставленное Мэттом Кларксоном.

Ответ 3

Чтобы JSLint знал, что вы узнаете window как глобальный объект, добавьте эту директиву в начало файла:

/*global window*/

Раньше я мог использовать:

/*jslint browser: true */

но это больше не работает. Теперь, в соответствии с JSHint help относительно опции browser:

Он не предоставляет self или window; вам придется запросить эти псевдонимы ужасного глобального объекта самостоятельно.

Я не уверен, когда это изменение было внесено, но на какое-то время меня затихло.

Ответ 4

Мне пришлось использовать оба вышеуказанных ответа на этот код, чтобы избавиться от всех предупреждений:

/*jslint browser:true*/
/*global window*/
// eventBoiler v0.1.1 by @ryanpcmcquen
// https://github.com/ryanpcmcquen/eventBoiler
(function (win, doc) {
    'use strict';
    win.eventBoiler = function (selector, typeOfEvent, func) {
        doc.querySelector(selector).addEventListener(typeOfEvent, func);
    };
    win.eventBoiler.all = function (selectors, typeOfEvent, func) {
        Array.prototype.slice.call(doc.querySelectorAll(selectors)).map(function (i) {
            i.addEventListener(typeOfEvent, func);
        });
    };
}(window, document));

Итак, для меня это решение при использовании сайта JSLint:

/*jslint browser:true*/
/*global window*/

Ответ 5

Если вы не хотите указывать это в каждом файле, вы можете установить его глобально в конфигурационном файле eslintrc следующим образом:

"globals": {
    "window": true,
}