繁体   English   中英

以下哪个setTimeout格式更好?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM