是否有充分的理由将字符串传递给setTimeout?

是否有充分的理由将字符串传递给setTimeout?

我们都知道将字符串传递给setTimeout(或setInterval)是邪恶的,因为它在全局范围内运行,有性能问题,如果你注入任何参数等可能是不安全的。所以这样做肯定是不赞成的:

setTimeout('doSomething(someVar)', 10000);

赞成这个:

setTimeout(function() {
    doSomething(someVar);}, 10000);

我的问题是:有没有理由做前者?它是有史以来最好?如果不是,为什么甚至允许?

我想到的唯一场景是想要使用存在于全局范围中但在本地范围内被覆盖的函数或变量。这听起来像是糟糕的代码设计,但是......


斯蒂芬大帝
浏览 330回答 2
2回答

哔哔one

你总是可以通过访问全局变量作为窗口对象的属性来window.globalVar使用全局变量(虽然使用全局变量确实不是一个好习惯),所以不,我认为没有充分的理由使用不推荐的语法。它可能是出于历史原因而允许的:正如Felix Kling所提到的,原始语法只允许传递一串代码:推出了JavaScript 1.0,Netscape 2.0。使用JavaScript 1.2,Netscape 4.0引入了传递Function对象的引用 ; 自5.0版以来由MSHTML DOM支持。[ 来源,我的重点]如果浏览器不支持使用字符串作为第一个参数setTimeout和setInterval了,会有很多的代码无法再发挥作用了互联网上。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript