1

基本的に、これを渡す関数があります...ボタンがクリックされてから1/3秒後にこの関数を実行する必要があるので、私が考えたことは次のとおりです。

setTimeout("somefunction(this)", 3000);

私が知っているように、 setTimeout("", x); "" で動作しますが、動作しません。

「」なしで試しましたが、次のことを試みても機能しません。

  setTimeout("somefunction("+this+")", 3000);

それでもうまくいきません。これで1時間の試みが好きでした。

どんな助けでも大歓迎です。

4

2 に答える 2

2

クロージャーを使用する必要があります

var that = this;
setTimeout( function(){ somefunction(that); }, 3000);
于 2012-07-30T18:57:00.903 に答える
1

タイムアウトは非同期イベントであるため、コンテキストが失われます。それを保存する 1 つの方法は、すぐに実行される関数を介してバインドすることです。

setTimeout((function(that) {
    return function() { somefunction(that); };
})(this), 3000);

@epascarelloの回答が示すように、別の方法は、変数の外側のスコープへの参照を作成することです。

後者は評価され、評価は悪であるため、関数参照を文字列setTimeoutに渡すことは常に良いことです。setInterval

于 2012-07-30T18:56:50.220 に答える