Проблема JSLint с «окном» как глобальной переменной - PullRequest
75 голосов
/ 10 сентября 2009

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

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

Ответы [ 5 ]

135 голосов
/ 12 сентября 2011
/*jslint browser: true*/

Было правильное решение для этого. Начиная с 2017-07-07, вы должны установить глобальную директиву вручную. Из документации JSLint :

Директива / * global * / используется для указания набора глобальных переменных (обычно функций и объектов, содержащих функции), доступных для этого файла. Это обычно использовалось в браузерах для соединения исходных файлов до появления модулей ES6. Использование глобальных переменных настоятельно не рекомендуется, но, к сожалению, веб-браузеры требуют их использования. Директива / * global * / может использоваться только в том случае, если выбран параметр «Предполагать браузер».

Так что вам нужно будет использовать:

/*jslint browser */
/*global window */
76 голосов
/ 10 сентября 2009

Просто сделайте комментарий в вашем скрипте так:

/*global window */

... your script goes here

Этот комментарий сообщит JSLint, что window определено где-то еще.

См .: http://www.JSLint.com/lint.html,

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

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

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

Обновление:

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

4 голосов
/ 17 ноября 2015

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

/*global window*/

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

/*jslint browser: true */

но это больше не похоже на работу. Теперь, согласно справке JSHint относительно опции browser:

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

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

3 голосов
/ 29 октября 2015

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

/*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*/
1 голос
/ 02 октября 2017

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

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