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