Как избежать подразумеваемых глобалов в javascript (JSlint) - PullRequest
5 голосов
/ 01 февраля 2011

При написании такого кода jsLint жалуется на подразумеваемые глобальные переменные:

var Test = (function(){
    var fnc = function(x){
        alert("pew: "+x);
    };

    return {
        fnc: fnc
    };
}());

Test.fnc("hat");

(в частности, «подразумеваемый глобальный: оповещение 4»)

Что считается правильным способом избежать этого? Мой инстинктивный ответ таков, но я не уверен, что это «правильно»:

var Test2 = (function(global){
    var alert = global.alert;

    var fnc = function(x){
        alert("pew: "+x);
    };

    return {
        fnc: fnc
    };
}(this));

Test2.fnc("hat");

Edit: Похоже, что консенсус заключается в том, что проблема не в том, что я получаю доступ к глобальному, а в том, что я не говорю jslint, что такое глобальные. Я оставлю это открытым немного дольше, чтобы увидеть, есть ли у кого-то еще вход, затем я выберу ответ.

Ответы [ 4 ]

8 голосов
/ 01 февраля 2011

Вы можете добавить свой файл с комментарием

/*global alert $ document window*/

Обычно я говорю JSLint, что это не подразумеваемое, а внешнее.

Это и ненавязчиво, и говорит вашим коллегам-программистам, что вы объявляете эти переменные внешними, что полезно для больших многофайловых программ.

4 голосов
/ 01 февраля 2011

Используйте параметры jsLint «предположить браузер» и «принять консоль, оповещение, ...», чтобы сделать эти функции известными jsLint. См. http://www.jslint.com/lint.html#options для получения списка всех доступных опций.

1 голос
/ 04 октября 2015

Для тех, кто ищет JSHint вместо этого, есть опция «браузер», которая может быть установлена ​​в «true» и обрабатывать все распространенные глобальные переменные.То же самое для "JQuery".Я узнал об этом из исходного кода gradle-js-plugin .

0 голосов
/ 01 февраля 2011

Я думаю, что ваш путь правильный (и тоже хороший), но нет необходимости объявлять global.alert, просто используйте global.alert("pew: "+x);

...