0

JavaScript 匿名関数内の変数のスコープを理解しようとしています。

このコードは PhoneGap アプリ用であるため、Webkit ブラウザー内でのみ機能する必要があります。

以下のコード ブロックを考えると、setTimeoutへの引数はall_packs内の各項目で常に同じになりますか、それともpack_nameの値の変化 (jQuery ループの反復ごとに変化するため) が引数に影響しますか? つまり、新しい各行は、all_packs内の異なるアイテムに関連付ける必要があります。これは無名関数を使用する正しい方法ですか、それとも一部の行が同じ名前を参照することになりますか?

this.nameは、 all_packs内のアイテムを参照なくなるため、タップ無名関数内では使用できません。その結果、最初に名前をpack_name内に隠しました。

TAP_DELAYが別の場所で設定された定数であり、start_workが有効な関数であり、all_packsがオブジェクトの配列であるとします。

    // Load each pack
    $( all_packs ).each( function(index) {              
            // Set vars
            var pack_name = this.name;
            var row = $( '#templates .row' ).clone( true );

        // Append new row
        $( '#test' ).append( row );

            // Valid pack?
            if ( this.valid ) {             
                // Configure for tap
                row.on( 'tap', function() {
                                setTimeout( start_work, TAP_DELAY, pack_name );             
                });
            } else {
                            setTimeout( start_work, TAP_DELAY, this.name );
            }
        });
4

0 に答える 0