2016-12-31 14 views
0

私は関数の代わりにREPEATを作成しようとしています。ここに私のコードです:入れ子関数の繰り返し

function REPETER(nb) { 
return { 
    INSTRUCTIONS: function(callback) { 
     for(i_repeter=1;i_repeter<=nb;i_repeter++) callback(); 
     return this ; 
    } 
}; 
} 
var x = 1 ; 
REPETER(5) 
.INSTRUCTIONS (() => { 
xxx = xxx + 2 ; 
alert(i_repeter); 
} 
); 

それはうまくいきます。

しかし:

REPETER(2) 
.INSTRUCTIONS(() => { 
xxx = xxx + 1 ; 
REPETER(5) 
.INSTRUCTIONS(() => { 
xxx = xxx + 2 ; 
alert(i_repeter); 
} 
); 
} 
); 

は動作しません、最初のREPETERは何もしません。

どうすればこの問題を解決できますか?

ありがとうございます!

答えて

0

機能内にi_repeterを宣言する必要があります。宣言していないので、暗黙のグローバルを作成しています。グローバルは悪いことであり、暗黙的なものは二重にあります。あなたはリピータにリピータを呼んでいるので、クロストークが発生します。最初の人は前にそれが終わったと思っています。

ので:

function REPETER(nb) { 
    return { 
    INSTRUCTIONS: function(callback) { 
     var i_repeter;     // <=== Change is here 
     for (i_repeter = 1; i_repeter <= nb; i_repeter++) callback(); 
     return this; 
    } 
    }; 
} 

xxxを更新あなたの関数でi_repeterを使用しよう(とxxxを宣言してください)はありません。

+1

ありがとう、私はそれが変数i_repeterの問題だと思っていましたが、私はそれが何であるか正確にはわかりませんでした。 指示アラート(i_repeter)は、問題がどこにあるかを確認しようとしましたが、それは私のコードにはありません。 – rognntudjuu

関連する問題