[英]Which of these setTimeout format is better?
哪些构造更好,为什么
setTimeout(function() { $('#secret').hide(); }, 5000);
setTimeout( "$('#secret').hide();", 5000);
$('#secret').show(5000, function(){ this.hide(xxx)} );
第一个肯定是,它使用匿名函数捕获超时后执行的函数。
第二个使用eval()
来计算你的字符串,这可能比第一个选项慢(从不明白为什么使用eval()
是坏的参数)。
第三个元素显示元素超过5秒,然后一旦完成就隐藏,因此与第一个元素不同。
更新:
nickf的更新促使我查看源代码,如果元素已经可见,则数字3将立即执行。 以下是相关的源代码行
if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
return opt.complete.call(this);
在选项1和选项2之间,选项1更好,因为它不需要评估字符串以将其转换为可执行代码。
选项三不做同样的事情。 它可能具有相同的输出,但仅仅是因为一个kludge:使用一些其他功能,这需要很长时间才能调用你想要的那个。 这是非常低效的,并没有准确显示你想要做什么。
选择一个。
编辑 :实际上,我刚刚测试了你的选项三,并且可以说如果元素是可见的,那么无论你传递给show()
函数的超时,都会立即发生回调。
对于第一个,你失去了将该功能与其他功能连接起来的能力。 第二个是一个计算字符串,所以你必须小心上下文,不管它对性能有什么好处。 最后一个更好,因为之后你可以调用其他jquery方法,jquery也有更好的时间管理。
第一个例子和第三个函数不同,前5秒隐藏'#secret',第三个示例在5秒内缓慢执行。 这一切都取决于你想做什么。
因为你正在使用jQuery我认为你应该使用第三个。
没有jQuery,第一个优于第二个,因为在第二种情况下,JS引擎必须进行eval表达,而在第一种情况下则没有。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.