在setTimeout中调用Javascript函数 - 哪个更好?

时间:2012-01-23 04:37:35

标签: javascript settimeout

我有两个版本的代码。有人能告诉我哪个是最优和更快的吗?

版本1:

function showMsg(a)
{
    alert(a);
}
function invokeShowMsg()
{
    var msg = 'hi';
    showMsg(msg);
}
window.setTimeout(invokeShowMsg,1000);

第2版:

function showMsg(a)
{
    alert(a);
}
window.setTimeout(function(){showMsg('hi');},1000);

还有一个疑问,是版本2调用方式称为“关闭”吗?

3 个答案:

答案 0 :(得分:4)

就速度而言,你不会注意到两者之间的任何差异,所以选择你喜欢的。

我更喜欢#2 ,因为它更清晰并且保持语法可读:

setTimeout(function() {
  showMsg('hi');
}, 1000);

答案 1 :(得分:3)

是的,版本2称为Closure。就速度而言,它们都是等价的。

答案 2 :(得分:2)

正如@Blender所说,我也更喜欢 2 ,因为它不会用(半无用的)“调用者”函数污染全局空间。它很干净,对于知道setTimeout如何工作的人来说很容易理解。就速度而言,几乎没有差别。 Here's a performance comparison of the two methods

但是,据我所知,它是不是一个闭包。它只是一个匿名函数。在JavaScript中,与许多其他动态语言一样,函数是一等公民,这意味着它们可以被创建和传递 - 它们是对象。但是,闭包不仅仅是一个匿名函数。 this question的答案解释了封闭是非常简洁的。