JavaScriptのsetTimeoutとset Interval関数の参照と呼び出し
2773 ワード
どのようにsetTimeout、setIntervalにパラメータを送るかは、次のコードを参照してください.
コードを修正してください.
文字列以外のパラメータを渡すには、閉じたパケットを使って次のコードを見てもいいです.
set Timeout、set Intervalの関数コールは以下のコードがあります.
同様に、setInterval上の書き方についても正常に動作しません.プログラムは警告枠を一度だけ弾いて、エラーを報告します.タイマーを
aut()の関数を使わない場合、autだけを使うとどうなりますか?
autに引用符をつければ
var str = 'aaa';
var num = 2;
function auto(num){
alert(num);
}
setTimeout('auto(num)',4000);
このように書くと正常に動作することができますが、これはパラメータ伝達というより直接的に使用されるグローバル変数です.したがって、このような書き方は必要ありません.一般的には、伝達局所変数をパラメータとして用いることが多いです.コードを修正してください.
//var str = 'aaa';
var num = 2;
function test(){
var str = 'bbb';
setTimeout('auto(str)',4000);
}
function auto(a){
alert(a);
}
test();
このような書き方はエラーとなります.strに対するグローバルステートメントのコメントをキャンセルすると、aa、すなわち関数は依然としてグローバル変数を呼び出します.下のコードを見てください.
//var str = 'aaa';
var num = 2;
function test(){
var str = 'bbb';
setTimeout('auto("str")',4000);
}
function auto(a){
alert(a);
}
test();
上のstrに注意してください.このように書くと「str」が出力されます.つまりタイマーが関数を呼び出した後、strを直接パラメータとして扱います.このように伝達するパラメータは常に文字列です.これは私たちが欲しい結果ではない.文字列以外のパラメータを渡すには、閉じたパケットを使って次のコードを見てもいいです.
//var str = 'aaa';
var num = 2;
function test(){
var str = 'bbb';
setTimeout(auto(str),4000);
}
function auto(str){
return function(){
alert(str);
}
}
test();
出力結果は「bbb」で、autに引用符を付けると同じようにエラーが発生します.もちろん、こう書くのもいいです.
var num = 2;
function test(){
var str = 'bbb';
//setTimeout(auto(str),4000);
setTimeout(function(){alert(str)},4000);
}
function auto(str){
return function(){
alert(str);
}
}
test();
最後に注意したいのは、クローズドリレーパラメータを使用しない場合、タイマーが呼び出した関数は引用符を付けます.引用符を付けないとエラーが発生します.以上の状況は同様にset Interval()に適合している.set Timeout、set Intervalの関数コールは以下のコードがあります.
var num = 2;
function auto(){
alert(num);
}
setTimeout(auto(),4000);
このプログラムでは、テストの時にすぐにポップアップの警告枠が見えます.つまり、上記の方法で関数を引用すると、タイマーは機能しません.同様に、setInterval上の書き方についても正常に動作しません.プログラムは警告枠を一度だけ弾いて、エラーを報告します.タイマーを
setInterval('auto()',4000);
setTimeout('auto()',4000);
プログラムは正常に動作します.aut()の関数を使わない場合、autだけを使うとどうなりますか?
var str = 'aaa';
var num = 2;
function auto(){
alert(num);
}
//setInterval(auto,4000);
setTimeout(auto,4000);
このようにプログラムを書いても正常に動作できます.autに引用符をつければ
//setInterval('auto',4000);
setTimeout('auto',4000);
正常に仕事ができません.