在javascript setTimeout中将字符串作为函数运行?

5 javascript string settimeout

为什么这段代码有效?

setTimeout("document.body.innerHTML = 'TEST'", 1000)
Run Code Online (Sandbox Code Playgroud)

不应该吗?

setTimeout(function() {
    document.body.innerHTML = 'TEST'
}, 1000)
Run Code Online (Sandbox Code Playgroud)

如何setTimeout将字符串转换为函数?

the*_*eye 6

引用MDN的setTimeout文档

备用语法中的代码是您希望在延迟毫秒后执行的代码字符串(建议不要使用此语法,原因与使用相同eval())

正如MDN中所建议的那样,最好避免字符串,setTimeout因为eval字符串传递的实现.


这不仅仅是一个浏览器实现的东西,但HTML规范本身在本节中以这种方式定义它

handle = window . setTimeout( code [, timeout ] )
Run Code Online (Sandbox Code Playgroud)

计划超时以在超时毫秒后编译和运行代码.