为了账号安全,请及时绑定邮箱和手机立即绑定

setTimeout的问题

setTimeout的问题

不负相思意 2019-03-12 15:13:02
setTimeout()接收两个参数,第一个参数为执行的回调,第二个参数是延时的时间。第一个参数可以为字符串。setTimeout("alert(1)",1000);setTimeout(function(){alert(1)},1000);这两个都会在1秒后弹框,在《Javascript高级程序设计第三版》中明确指出第一种方式可能会导致性能缺失。但是为什么会性能缺失却没有详细阐述,这里我想问的就是第一个参数传递字符串为什么会导致性能缺失?导致的是什么性能缺失?
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

实质上如果第一个参数填写字符串的话是调用了eval()方法,以下是MDN对性能损失的解释:

eval() 通常比替代方法慢,因为它必须调用 JS 解释器,而许多其他结构则由现代 JS 引擎进行优化。

大致解释以下,就是每一次运行这段代码都会重新调用JS解释器,重新进行解释运行,而优化步骤比如V8引擎中JIT(Just In Time)优化方法会失效。


查看完整回答
反对 回复 2019-03-18
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

字符串要转换成可执行的代码 类似多走了一遍eval


查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 591 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信