这些结构中的哪一个更好,为什么
setTimeout(function() { $('#secret').hide(); }, 5000);
setTimeout( "$('#secret').hide();", 5000);
$('#secret').show(5000, function(){ this.hide(xxx)} );
答案 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表达,而在第一种情况下则没有。