web-dev-qa-db-ja.com

javascriptで新しいグローバル関数を定義する方法

クロージャに関係しているときに関数をグローバルにしようとすると問題が発生します。以下にリストされているコードには、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がこの関数をグローバルと見なす必要があることを実際に理解できるように、これを修正するのを手伝ってもらえますか?

11
Eric

代わりに、window.getNameFieldと呼ぶことができます。

alert(window.getNameField().value);

または、クロージャーの外側で変数を定義することもできます。

var getNameField;

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

alert(getNameField().value);
19
Tim Down

やってみます

window["getNameField"] = function(fieldId) {
9
jhurshman

JSLintは、この目的のために注釈付きのコメントを取ります。 /*global */コメントの使用について ここ を読んでください。

2
zem