Проблема 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,
}