0

別の関数内で変数を使用したいのですが、定義されていません! これとvarで試してみました。別の関数で定義するにはどうすればよいですか? 以下のコードでは、「next」で actionInt を 1 ずつ追加したいのですが、定義されていません。何か案が?

        func1 : function(event) {

            if (action == "test"){
                console.log(test clicked);
            }


            else if (action == "test2"){

                console.log(test2 clicked);
            }



        },
4

2 に答える 2

1

actionIntこれは、次の行で宣言されているためです。

var actionInt = parseInt(action);

this.actionInt++ここthisで、 は呼び出しコンテキストであり、アドホックに決定されます (おそらく、イベント リスナーをアタッチしたオブジェクト) 。を使用するときに基数を指定することをお勧めするのと同じように、JS で実際に参照するものを読んで、これが意味をなさないことを理解すること
を強くお勧めします。thisparseInt

actionInt = parseInt(action, 10);//action is number?
if (action === 'next')//action is string?

actionnextまたはの場合previousparseInt常に が返さNaNれます。インクリメントしてもNaN(非数 + 1 は非数)

しかし、どのように見ても、実際には閉鎖を探していると思います。

onPageClick : (function(actionInt)
{
    return function(event)
    {
        var action = event.target.innerHTML;
        this.loadPage(actionInt, 25);//what is this?
        if (action == "Next"){
            console.log(actionInt++);//no this
        }
        else if (action == "previous"){
            console.log(actionInt--);
        }
    };
}(0)),//pass initial actionInt value here

JS が式/変数名を解決する方法とクロージャーの仕組みの詳細については、この回答を参照してください... がグローバル変数の
場合actionInt、IIFE を省略して を使用するだけでactionInt、デフォルトでグローバル変数に解決されます (またはスローします)。厳密モードで定義されていない場合はエラー)

于 2013-09-19T13:43:45.417 に答える
0

あなたの場合、これはグローバルスコープ(おそらく)-windowオブジェクトを指します。

あなたのような場合は、this.variable = 0単に使用する必要はありませんvar variable = value;

于 2013-09-19T13:34:41.510 に答える