<Script>
var i = 0;
function callback( ) {
i++;
document.writeln(i);
if (i == 1000000000) {
return; //循环到很多次才返回.ie下一般3000多层就堆栈溢出了, google浏览器相对要大一点一般9500以上..
} else {
callback( ); //递归调用
}
}
callback(i);
</script>
上面这段代码在ie下和谷歌,火狐下都会引起堆栈溢出.而得不到全部的运行.
改成下面的就可以了..
<Script>
var i = 0;
function callback(p1,p2,p3,p4 ) {
i++;
document.writeln(p1);
if (i == 100000) {
return; //循环到很多次才返回.ie下一般3000多层就堆栈溢出了, google浏览器相对要大一点一般9500以上..
} else {
addTask(callback,0,"参数"+i,"参数2","参数3","参数4"); //递归调用变成了非递归调用
}
}
/**
*添加一个任务,
* @param {Function} fun 任务函数名
* @param {number} delay 定时时间
* @param {object} params 传递到fun中的参数
*/
function addTask(fun, delay) {
if (typeof fun == 'function') {
var argu = Array.prototype.slice.call(arguments, 2);
var f = (function () {
fun.apply(null, argu);
});
return window.setTimeout(f, delay);
}
return window.setTimeout(fun, delay);
}
callback(i);
</script>