bind,call,apply/setTimeout, setInterval傳遞參數和取消

bind,call,apply

func.call(obj, arg1, arg2, ..., argn);

func.apply(obj, [arg1, arg2, ..., argn]);

var newFun = func.bind(obj, arg1, arg2, ..., argn);

newFun();

call和apply是立即執行方法,而bind是產生一個新方法用於後續調用。


setTimeout, setInterval傳遞參數和取消

var st = setTimeout(function,milliseconds,param1,param2,...);

var si = setInterval(function,milliseconds,param1,param2,...);

clearTimeout(st);

clearTimeout(si);

param1,param2,...是可選項,用於給function提供額外的參數,但是注意,該特性在IE9及之前的IE不能使用!!

但是若要用通用的方法給function傳遞參數該怎麼做?下面:

1. 簡單參數,如string:

setTimeout("func(" + param + ")", time);

2. 對象參數,當然簡單參數也適用:

function tt(t){
  console.log(t)
};
var ss = 123;

setTimeout(function(){
  tt(ss);
}, 1000);

setTimeout(function(ss){//注意,此方式無法將ss傳遞進去,將會輸出undefined!
  tt(ss);
}, 1000);

一個需要注意的問題

function tt(){
  console.log(123)
};
setTimeout(tt(), 1000);

這樣tt會立即執行,而不是等一秒後執行!在程序執行到setTimeout時會先執行一次tt,然後等1秒再執行一次tt的return,如果tt方法返回一個新的方法tt2,那麼tt2會在1秒後執行。

兩個有關setTimeout中參數傳遞問題的討論,感覺方法有點笨,完全可以按照2來處理:

http://boleyn.iteye.com/blog/1144015

http://www.cnblogs.com/longjxchina/archive/2011/06/03/2072076.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章