setTimeout的问题

setTimeout()接收两个参数,第一个参数为执行的回调,第二个参数是延时的时间。
第一个参数可以为字符串。

setTimeout("alert(1)",1000);
setTimeout(function(){alert(1)},1000);

这两个都会在1秒后弹框,在《Javascript高级程序设计第三版》中明确指出第一种方式可能会导致性能缺失。但是为什么会性能缺失却没有详细阐述,这里我想问的就是第一个参数传递字符串为什么会导致性能缺失?导致的是什么性能缺失?

阅读 1.9k
2 个回答

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题