setTimeout的问题

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

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

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


不负相思意
浏览 592回答 2
2回答

慕丝7291255

实质上如果第一个参数填写字符串的话是调用了eval()方法,以下是MDN对性能损失的解释:eval() 通常比替代方法慢,因为它必须调用 JS 解释器,而许多其他结构则由现代 JS 引擎进行优化。大致解释以下,就是每一次运行这段代码都会重新调用JS解释器,重新进行解释运行,而优化步骤比如V8引擎中JIT(Just In Time)优化方法会失效。

开心每一天1111

字符串要转换成可执行的代码 类似多走了一遍eval
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript