13

当涉及关闭时,我在尝试使函数全局化时遇到问题。在下面列出的代码中,我有一个匿名方法,它在被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 真正理解这个函数应该被认为是全局的吗?

4

3 回答 3

20

您可以改为将其称为window.getNameField

alert(window.getNameField().value);

或者你可以在闭包之外定义一个变量:

var getNameField;

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

alert(getNameField().value);
于 2010-10-12T13:28:49.263 回答
10

我会尝试

window["getNameField"] = function(fieldId) {
于 2010-10-12T12:19:12.697 回答
2

JSLint 为此使用注释注释。在此处阅读有关使用/*global */评论的信息。

于 2010-10-12T12:20:55.017 回答