1

私のjavascriptコードには、次のものがあります。

function foo(param1) {
    setInterval( bar(param1), 3000 );
}

function bar(msg) {
    alert(msg);
}

function set() {
    foo('hello');
}

そして、ページの読み込み時に、私が呼び出すとset()、アラートメッセージが1回だけ表示されます。なぜ私が期待するように動作しないのですか?問題は私がfoo()関数を渡しているパラメーターにあると思いますが、それが正確に何であるか、私は理解することができません。

問題がパラメータにある場合、目的の結果を達成するための代替方法は何でしょうか。

ありがとう。

4

3 に答える 3

2

最良の方法は、クロージャーを使用して、渡す関数からパラメーターにアクセスすることですsetInterval

function foo(param1) {
    setInterval(function () {
        bar(param1);
    }, 3000);
}

function bar(msg) {
    alert(msg);
}

function set() {
    foo('hello');
}
于 2013-01-16T16:54:23.673 に答える
1

setInterval関数全体を呼び出す戻り値を指定している間、関数を期待します。

動作するはずの修正バージョン:

var msg = null;

function foo(param1) {
   // When foo is called, its argument is set to msg variable, so the function called 
   // by setInterval will have access to the message that must show in a window.alert
    msg = param1;
    setInterval(bar, 3000 );
}

function bar() {
    alert(msg);
}

function set() {
    foo('hello');
}
于 2013-01-16T16:51:14.213 に答える
1

関数をに渡す必要があります。関数setIntervalを実行し、その戻り値を渡します(undefined実行された関数には戻り値がないため)。

代わりに無名関数を使用してみてください。

function foo(param1) {
    setInterval(function () {
        bar(param1);
    }, 3000);
}

function bar(msg) {
    alert(msg);
}

param1ここで変更されることはないので、これ以上複雑なものは必要ありません。これが実際の例です。

于 2013-01-16T16:58:43.820 に答える