日期:2014-05-16 浏览次数:20389 次
<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>