当前位置: 首页 > 面试题库 >

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

太叔烨霖
2023-03-14
问题内容

我们都知道,将字符串传递给setTimeout(或setInterval)是邪恶的,因为它是在全局范围内运行的,存在性能问题,如果您注入任何参数等,则可能不安全。因此,绝对不建议这样做:

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

赞成:

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

我的问题是:有没有理由做前者?有 没有 更好的选择?如果不是,为什么甚至允许呢?

我想到的唯一一种情况是希望使用全局范围内存在但局部范围已被覆盖的函数或变量。在我看来,这听起来像是糟糕的代码设计,但是…


问题答案:

您始终可以通过将全局变量作为窗口对象的属性来访问来使用全局变量,例如window.globalVar(尽管使用全局变量确实不是一个好习惯),所以不,我认为没有充分的理由使用不赞成使用的语法。

可能由于历史原因而被允许:正如Felix Kling所述,原始语法只允许传递代码字符串:

在JavaScript 1.0,Netscape 2.0中引入。 在JavaScript 1.2,Netscape4.0中引入了传递函数对象参考 ;从5.0版开始受MSHTML DOM支持。

如果浏览器不支持使用字符串作为第一个参数setTimeoutsetInterval了,会有很多的代码无法再发挥作用了互联网上。



 类似资料:
  • 问题内容: 我正在尝试通过使用JSON格式的字符串初始化Javascript变量来加载数据表。如果我声明: 那么我的表将正确加载该行。 我尝试在脚本之前初始化Java字符串,然后将该对象传递给Javascript变量,如下所示: 我的表无法识别这一点,并且在尝试以这种方式传递行时无法加载该行。如何正确地将Java字符串传递给Javascript,以便我的表能够加载数据? 问题答案: 尝试使用引号。

  • 这个网页让我相信我可以将一个空字符串传递给,以关闭图形的y记号。 但是,当我尝试这样做时,我得到以下错误: 怎么回事?如果这种关闭y型刻度的方法是不正确的,那么正确的方法是什么?

  • 我试图将字符串参数传递给JavaScript函数。出于某种原因,它只能获取整数。我在这里只放了字符串的语法,因为我知道这是个问题,因为它与int一起工作。 发送函数内的代码: 最终,我希望用计数器的值调用HTML页面上的以下函数,如上图所示: 正如我提到的,当我发送int时,javascript文件会发出警报,但当我发送字符串时不会做出反应。

  • 问题内容: 到目前为止有效 但是当 值 的包含空格,就像它不工作: 全线: 如何传递此参数值? 问题答案: 您只需要用%20替换空白: 这被称为 Url Enconding, 用于不安全或特殊字符。 这是一个汇总表: 参考文献: https://blogs.msdn.microsoft.com/oldnewthing/20100331-00/?p=14443 https://perishablep

  • 问题内容: 我正在将ajax发布到webmethod上,我可以在客户端(通过Firebug)看到请求的状态为200,但未达到我的webmethod中的停止点(webmethod的第一行)。json参数一切正常,但是通过反序列化json的方式,我不得不将其更改为字符串。 js: aspx: 问题答案: 您在jQuery JSON帖子中缺少内容类型: 请参阅本文。当我遇到类似的问题时,它对我很有帮助:

  • 问题内容: 我试图对一个javascript对象进行字符串化,然后将该字符串作为参数传递给Code Behind中的WebMethod。我无法正常工作,因为我收到500的内部服务器错误,并且stacktrace指出参数值丢失。 这是JavaScript代码: 这是网络方法: 好像我已经尝试了通过google搜索以及在此处找到的所有内容。 我还尝试了很多人参考的本指南:http : //encosi