Как определить новую глобальную функцию в JavaScript - PullRequest
11 голосов
/ 12 октября 2010

У меня проблема с попыткой сделать функцию глобальной, когда она участвует в закрытии. В приведенном ниже коде у меня есть анонимный метод, который определяет новую функцию для window, getNameField.

.
(function () {
    function alertError (msg) {
        alert(msg);
    }
    window.getNameField = function (fieldId) {
        try{
            if(!fieldId) {
                fieldId='name';
            }
            return document.getElementById(fieldId);
        } catch(e) {
            alertError(e);
        }
    };
}());

alert(getNameField().value);

Это прекрасно работает в браузере, но когда я запускаю код в JSLint.com с включенным «Запретить неопределенные переменные», это выдает мне ошибку.

Проблема в строке 17, символ 7: «getNameField» не определено.

Можете ли вы помочь мне исправить это, чтобы JSLint действительно понимал, что эту функцию следует считать глобальной?

Ответы [ 3 ]

19 голосов
/ 12 октября 2010

Вместо этого вы можете назвать его как window.getNameField:

alert(window.getNameField().value);

Или вы можете определить переменную вне замыкания:

var getNameField;

(function(){
    getNameField=function(fieldId){
        // Code here...
    };
}());

alert(getNameField().value);
9 голосов
/ 12 октября 2010

Я бы попробовал

window["getNameField"] = function(fieldId) {
2 голосов
/ 12 октября 2010

JSLint принимает комментарии для этой цели. Прочитайте здесь об использовании /*global */ комментария.

...