以下哪个setTimeout格式更好?

时间:2009-10-23 13:24:20

标签: javascript jquery syntax

这些结构中的哪一个更好,为什么

setTimeout(function() { $('#secret').hide(); }, 5000); 

setTimeout( "$('#secret').hide();", 5000);

$('#secret').show(5000, function(){ this.hide(xxx)} );

5 个答案:

答案 0 :(得分:4)

第一个肯定是,它使用匿名函数捕获超时后要执行的函数。

第二个使用eval()来评估你的字符串,这可能比第一个选项慢(从不明白为什么使用eval()的参数不好)。

第三个元素显示元素超过5秒,然后一旦完成就隐藏,因此与第一个元素不同。

<强>更新

nickf的更新促使我查看源代码,如果元素已经可见,则数字3将立即执行。以下是相关的源代码行

if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden ) 
    return opt.complete.call(this);

答案 1 :(得分:2)

在选项一和二之间,选项一更好,因为它不需要评估字符串以将其转换为可执行代码。

选项三不做同样的事情。它可能具有相同的输出,但仅仅是因为一个kludge:使用一些其他功能,这需要很长时间才能调用你想要的那个。效率很低,并没有准确显示你想要做的事情。

选择选项一。

编辑:实际上,我刚刚测试了你的选项三,并且可以说如果元素是可见的,那么回调会立即发生,无论你传递给{{1功能。

答案 2 :(得分:0)

使用第一个,你失去了将该功能与其他功能连接起来的能力。第二个是一个计算字符串,所以你必须小心上下文,不管它对性能有什么好处。最后一个更好,因为之后你可以调用其他jquery方法,jquery也有更好的时间管理。

答案 3 :(得分:0)

第一个示例和第三个函数不同,前5秒隐藏'#secret',第三个示例在5秒内缓慢执行。这一切都取决于你想做什么。

答案 4 :(得分:-3)

因为你正在使用jQuery我认为你应该使用第三个 没有jQuery,第一个比第二个更好,因为在第二种情况下,JS引擎必须进行eval表达,而在第一种情况下则没有。