setTimeout()JavaScript方法的工作原理
How exactly works the setTimeout() JavaScript method?
我不太喜欢JavaScript,我对setTimeout()方法有以下疑问。
因此,我有一个测试脚本:
function simpleMessage() {
alert("This is just an alert box");
}
// settimeout is in milliseconds:
setTimeout(simpleMessage, 5000);
因此,当我执行页面时,5秒钟后执行simpleMessage()功能,并显示警报弹出窗口。
我明白当我这样做时:
setTimeout(simpleMessage, 5000);
这意味着simpleMessage()函数必须在定时器设置后5秒后执行,但为什么在函数调用中使用simpleMessage而不是单纯形Message()?
simpleMessage
是函数的引用,而simpleMessage()
执行函数。setTimeout
需要一个引用函数来稍后调用。
为了让事情变得更加明显,您可以将函数声明写成
// define my function (but don't execute it)
var myFunction = function() {
alert('SOUND THE ALARMS!');
};
// start a timer that will execute the given function after the given
// period of time
setTimeout(myFunction, 5000);
参见setTimeout
文档。
setTimeout
的第一个参数是要执行的函数。标识符simpleMessage
指的是您希望setTimeout
执行的函数,因此这就是您作为参数提供给setTimeout
的内容。
如果执行setTimeout(simpleMessage(), 5000);
,则会立即执行simpleMessage
,然后setTimeout
会获得返回值作为其第一个参数。这相当于:
var value = simpleMessage();
setTimeout(value, 5000);
这没有道理;与CCD_ 12相同。
还考虑一个返回函数的高阶函数:
function funcFacotry() {
return function() { alert("this is just an alert box."); }
}
var simpleMessage = funcFactory();
setTimeout(simpleMessage, 5000);
在这种情况下,这实际上是有意义的,因为funcFactory
的返回值实际上是一个函数本身。
setTimeout
在设置为第二个参数的特定时间后执行函数,而如果与setInterval
一起使用,它将以一定的间隔执行,而不必考虑函数是否被执行(例如,如果用于动画,这将导致块度)。
第二个问题是:如果您使用带括号的函数,这是一个方法调用,而不带括号的使用是对特定方法的引用。
因为您需要在5s之后传递对要调用的函数的setTimeout的引用。
此:
setTimeout(simpleMessage(), 5000);
将在调用setTimeout函数的同时执行simpleMessage函数。
- Javascript form.submit()方法是如何工作的
- JavaScript中的这个call()-方法是如何工作的
- Jquery ajax方法请求体为null,但poster工作正常
- 我该如何阻止单击方法多次工作
- jQuery方法未按预期工作-toggleClass
- 如何让应用程序帮助程序方法在发送的请求为 JS 格式时工作
- jQuery on() 方法只能通过 childSelector 间接工作
- .html() 方法的 jQuery 在 IE 9 中无法正常工作
- 让 jquery 为 ajax 添加的元素工作的最佳方法是什么?
- 如何制作Javascript's减少对数组数组的方法工作
- invoke方法在Lodash中是如何工作的
- Jquery Ajax POST方法不工作,返回未定义的值
- sort和reverse方法在JavaScript中无法正常工作
- jsPDF addHTML方法不工作,没有错误消息
- 这个get方法似乎可以工作,但控制台中存在错误
- 无法调用方法“”;getEditResponseUrl"当使用表单ID打开表单时,绑定到工作表的Google
- Jquery Post方法在本地工作,但在服务器上不工作
- Angular onEnter ui.router方法无法正常工作
- 工作方法:document.getElementById(“ElementName”).style="显示:阻
- 汤博乐:如何用后标记控制CSS(更新:没有JQuery的工作方法!)