任何人都可以帮助我的,我想知道它们的区别:
setTimeout ("move ()", 3000);通过以下方式:
setTimeout (function () {setTimeout ("move", 3000)}, 100);感谢我的朋友们,他们把答案吓呆了。
发布于 2014-01-15 21:15:37
首先,最重要的区别在于执行的实际有用的代码:
setTimeout ("move()", 3000); // executes move(); - a function call
setTimeout ("move", 3000); // executes move; - a statement that doesn't do anything第二个区别是在何时执行有用的代码:
setTimeout ("move()", 3000); // move() gets called at T+3000
setTimeout (function () {setTimeout ("move()", 3000)}, 100); // move() gets called at T+3100最后一个区别也是当有用的代码被执行时,但它更微妙。JavaScript是单线程的,有一个事件循环。可以将超时视为事件本身,因为它们与常规DOM事件一样参与相同的事件循环。
setTimeout (move, 3000);第一个代码是直接的。当该行被执行时,对的调用被调度为在该时间之后的至少3000ms之后执行。“至少”很重要,因为如果JS引擎忙于执行其他代码,事件处理程序在应该执行之后可能会延迟很长一段时间。
setTimeout (function () {setTimeout (move, 3000)}, 100);第二个代码大致相同,与前面相同的调度被安排在遇到该行之后*至少* 100ms执行。
下面是一个可以延迟执行的示例:
setTimeout (function () {setTimeout (move, 3000)}, 100);
var d = new Date();
while ((new Date()).getTime() - 10000 < d.getTime()) ; // busy wait for 10 seconds正如前面所解释的,一些代码(不管是什么)被安排在至少100毫秒后执行。然而,在接下来的10秒内,浏览器将忙于执行while。经过10秒之后,浏览器就可以处理其他事件了,比如预定的代码。总而言之,move函数在第一次调用setTimeout之后(至少) 13秒被调用。
总而言之,差异是微妙的,在上面的简单场景中,没有任何东西可以证明在另一个调用setTimeout的内部调用setTimeout是合理的。如果程序逻辑需要它,也没有什么本质上不好的东西。
发布于 2014-12-16 19:35:27
有趣的问题,两个不同
首先,让我们定义一下:
移动方法A: setTimeout ("move ()",3000);函数方法B:(
1. javascript vm的不同编译顺序
对于A javascript,尝试将str编译成可运行的代码,并在3000毫秒后运行它,而B尝试将函数立即编译成可运行的代码,但在3000毫秒后运行它。
尝试下面的demo:
setTimeout ('alert("A")', 3000);
// "A" alerted after 3000 milliseconds
setTimeout (alert('B')||function(){alert('C')}, 3000);
// "B" alerted instantly, while C alerted after 3000 milliseconds 2.不同的使用范围
B可以有更大的使用范围,因为B可以通过闭包来携带函数的任何变量作为上下文,而A只有窗口或文档的上下文。
尝试下面的demo:
(function(){var va = 1; setTimeout ('alert(va)', 3000)}());
// run into error:Uncaught ReferenceError: va is not defined after 3000 milliseconds
(function(){var vb = 1; setTimeout(function(){alert(vb)}, 3000);}());
// 1 alerted after 3000 millisecondshttps://stackoverflow.com/questions/21136689
复制相似问题