JavaScriptのsetTimeoutとset Interval関数の参照と呼び出し

2773 ワード

どのようにsetTimeout、setIntervalにパラメータを送るかは、次のコードを参照してください.

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); 

正常に仕事ができません.