我有两个版本的代码。有人能告诉我哪个是最优和更快的吗?
版本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调用方式称为“关闭”吗?
答案 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的答案解释了封闭是非常简洁的。