Rumah > hujung hadapan web > tutorial js > Lulus parameter dan memanggil fungsi setTimeout dan setInterval dalam pengetahuan JavaScript_Basic

Lulus parameter dan memanggil fungsi setTimeout dan setInterval dalam pengetahuan JavaScript_Basic

WBOY
Lepaskan: 2016-05-16 15:11:06
asal
1298 orang telah melayarinya

Cara untuk menghantar parameter ke setTimeout dan setInterval
Lihat kod berikut:

var str = 'aaa'; 
var num = 2; 
function auto(num){ 
  alert(num); 
} 
setTimeout('auto(num)',4000); 

Salin selepas log masuk

Menulis seperti ini boleh berfungsi seperti biasa, tetapi daripada mengatakan bahawa ini adalah lulus parameter, lebih baik untuk mengatakan bahawa ia adalah pembolehubah global yang digunakan secara langsung. Oleh itu, cara penulisan ini tidak perlu Secara umum, pembolehubah tempatan diluluskan sebagai parameter.

Ubah suai kod:

//var str = 'aaa'; 
var num = 2; 
function test(){ 
  var str = 'bbb'; 
  setTimeout('auto(str)',4000); 
} 
function auto(a){ 
  alert(a); 
} 
test(); 
Salin selepas log masuk

Cara penulisan ini akan melaporkan ralat Jika anda membatalkan ulasan pengisytiharan global str, aaa akan menjadi output, iaitu, fungsi masih memanggil pembolehubah global.
Lihat kod di bawah:

//var str = 'aaa'; 
var num = 2; 
function test(){ 
  var str = 'bbb'; 
  setTimeout('auto("str")',4000); 
} 
function auto(a){ 
  alert(a); 
} 
test(); 

Salin selepas log masuk

Perhatikan str di atas dengan cara ini akan mengeluarkan "str", yang bermaksud bahawa selepas pemasa memanggil fungsi, str digunakan secara langsung sebagai parameter. Parameter yang dilalui dengan cara ini sentiasa rentetan. Ini bukan hasil yang kita mahukan.

Untuk menghantar parameter selain daripada rentetan, anda boleh menggunakan penutupan, lihat kod berikut:

//var str = 'aaa'; 
var num = 2; 
function test(){ 
  var str = 'bbb'; 
  setTimeout(auto(str),4000); 
} 
function auto(str){ 
  return function(){ 
    alert(str); 
  } 
} 
test(); 

Salin selepas log masuk

Hasil output ialah 'bbb' Jika anda menambah petikan pada auto(str), ralat juga akan dilaporkan.
Sudah tentu, ia juga bagus untuk menulis seperti ini:

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

Salin selepas log masuk

Perkara terakhir yang perlu diambil perhatian ialah apabila anda tidak menggunakan penutupan untuk menghantar parameter, fungsi yang dipanggil oleh pemasa perlu disebut Jika anda tidak menambah petikan, ralat akan dilaporkan. Situasi di atas juga sesuai untuk setInterval();


Panggilan fungsi dalam setTimeout dan setInterval
mempunyai kod berikut:

var num = 2; 
function auto(){ 
  alert(num); 
} 
setTimeout(auto(),4000); 
Salin selepas log masuk
Dalam program ini, anda boleh melihat kotak amaran pop timbul serta-merta semasa ujian. Dengan kata lain, pemasa tidak akan berfungsi jika fungsi dirujuk mengikut kaedah di atas.

Begitu juga, kaedah penulisan di atas untuk setInterval tidak berfungsi dengan betul Program ini hanya boleh memaparkan kotak amaran sekali dan kemudian melaporkan ralat.

Tukar pemasa kepada

setInterval('auto()',4000); 
setTimeout('auto()',4000); 
Salin selepas log masuk
Program ini berfungsi dengan baik.

Apakah rupanya jika anda tidak menggunakan auto() untuk memanggil fungsi tetapi hanya menggunakan auto?

var str = 'aaa'; 
var num = 2; 
function auto(){ 
  alert(num); 
} 
//setInterval(auto,4000); 
setTimeout(auto,4000); 

Salin selepas log masuk
Sebarang program yang ditulis dengan cara ini boleh berfungsi seperti biasa;

Jika anda menambah petikan pada auto

//setInterval('auto',4000); 
setTimeout('auto',4000); 

Salin selepas log masuk
Kedua-duanya tidak berfungsi dengan betul.
Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan