在javascript setTimeout中将字符串作为函数运行?
为什么这个代码可以工作在javascript setTimeout中将字符串作为函数运行?,javascript,string,settimeout,Javascript,String,Settimeout,为什么这个代码可以工作 setTimeout(“document.body.innerHTML='TEST',1000)引用MDN 备用语法中的代码是要在延迟毫秒后执行的代码字符串(由于与使用eval()相同的原因,不建议使用此语法) 正如MDN中所建议的,最好避免在setTimeout中使用字符串,因为实现可能eval传递的字符串 这不仅仅是一个浏览器实现,HTML规范本身也是这样定义的 将超时时间安排为在超时毫秒后编译并运行代码 基本上,规范允许它走任何一条路,所以浏览器会走任何一条路。
setTimeout(“document.body.innerHTML='TEST',1000)
引用MDN
备用语法中的代码是要在延迟毫秒后执行的代码字符串(由于与使用eval()
相同的原因,不建议使用此语法)
正如MDN中所建议的,最好避免在setTimeout
中使用字符串,因为实现可能eval
传递的字符串
这不仅仅是一个浏览器实现,HTML规范本身也是这样定义的 将超时时间安排为在超时毫秒后编译并运行代码
基本上,规范允许它走任何一条路,所以浏览器会走任何一条路。那很简单 但不推荐,因为它在字符串上使用
eval
。功能方式是更好的方式。文档
,
它的预期行为是:可以传递函数指针或字符串作为第一个参数
至于它是如何做到这一点的,JS是一种脚本语言,因此将字符串计算为一些解释代码(如eval)是它非常擅长的
编辑:正如Jimbo Jonny所指出的,我的意思是“非常擅长”,因为它是一种脚本语言,用于将字符串解析为工作代码;这是需要避免的。From:“备用语法中的代码是您希望在延迟毫秒后执行的代码字符串(由于与使用
eval()
相同的原因,不建议使用此语法)。”这是一个有趣的相关观点。实际上,将字符串求值到代码中会迫使它放弃一系列有益的优化,这不仅会减慢该行的速度,还会减慢代码中的许多其他操作。这不是它擅长的事情。事实上,它在这方面做得很差,应该尽可能避免。
handle = window . setTimeout( code [, timeout ] )