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 に答える