主题:【原创】在settimeout里实现函数中的参数传递 -- 铁手
举个简单例子,比如在网页编程中,如果在页面中有个 button,点击后,希望这个button的值每1秒钟追加一个 * ,该怎么实现?
可能会首先想到的是
<form>
<input type="button" onclick="ClickButton(this)">
</form>
==
function ClickButton(Button){
Button.value+="*"
setTimeout(ClickButton(Button),1000);
}
虽然直观,但是这种参数传递的方式是不行的。因为那个 Button 的值会消失。
解决的方法,是在 setTimeout 的时候,用一个 function 来包含上面的这个函数。
function ClickButton(Button){
Button.value+='.';
setTimeout(function(){ClickButton(Button);Button=null;},1000);
}
Button=null 是为了防止 ie 中可能出现的 memory leak
另外一种变通办法就是用全局参数,就不用考虑参数传递的问题。
鲜花已经成功送出,可通过工具取消
提示:此次送花为此次送花为【有效送花赞扬,涨乐善、声望】。
button.onclick = function(){
var self = this;
if(self.timer) {
clearTimeout(self.timer);
self.value = '';
}
self.timer = setTimeInterval(function(){
self.value+='*';
}, 1000);
}
//prevent IE6/7 memleak
window.onpreunload = function(){
button.onclick = null;
}
self在这里是个closure scope的变量,直接传过去.
如果用addEventListner就不用考虑memleak.建议desktop使用jQuery,mobile使用zeptos,这样省你很多事情