如何在javascript中定义新的全局函数

Eri*_*ric 11 javascript closures jslint

我有一个问题,试图在函数关闭时使函数成为全局函数.在下面列出的代码中,我有一个匿名方法,它定义了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);
Run Code Online (Sandbox Code Playgroud)

这在浏览器中运行良好,但是当我在JSLint.com中运行代码并打开 "Disallow undefined variables"时,它会给我一个错误.

第17行第7个问题:' getNameField'未定义.

你能帮我解决这个问题,以便JSLint真正理解这个函数应该被认为是全局的吗?

Tim*_*own 19

您可以将其称为window.getNameField:

alert(window.getNameField().value);
Run Code Online (Sandbox Code Playgroud)

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

var getNameField;

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

alert(getNameField().value);
Run Code Online (Sandbox Code Playgroud)


jhu*_*man 9

我会尝试

window["getNameField"] = function(fieldId) {
Run Code Online (Sandbox Code Playgroud)

  • 这将完全没有区别. (5认同)