首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么setTimeout("otherFunction()",2000)错了?

setTimeout("otherFunction()",2000)是一种使用setTimeout函数来延迟执行指定函数的方法。然而,这种方式存在一些问题,因此被认为是错误的。

首先,使用字符串作为参数传递给setTimeout函数的方式已经过时,不推荐使用。这是因为将函数作为字符串传递给setTimeout会导致函数在全局作用域中执行,可能会引发一些意想不到的问题,尤其是在复杂的应用程序中。

其次,使用字符串作为参数传递给setTimeout函数存在安全风险。恶意用户可以通过在字符串中注入恶意代码来执行任意的操作,这可能导致安全漏洞。

正确的做法是直接传递函数名或使用匿名函数作为参数,如下所示:

setTimeout(otherFunction, 2000);

或者

setTimeout(function() {

代码语言:txt
复制
otherFunction();

}, 2000);

这样可以确保函数在正确的作用域中执行,并且可以避免安全风险。

关于setTimeout的更多信息,您可以参考腾讯云的相关文档:setTimeout函数介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么要用 setTimeout 模拟 setInterval ?

因而我们一般用 setTimeout 模拟 setInterval ,来规避掉上面的缺点。...答案是:一秒后立即输出 5 个 5因为 for 循环了五次,所以 setTimeout 被 5 次添加到时间循环中,等待一秒后全部执行。 为什么是一秒后输出了 5 个 5 呢?...简单来说,因为 for 是主线程代码,先执行完了,才轮到执行 setTimeout 。 当然为什么输出不是 1 到 5 ,这个涉及到作用域的问题了,这里就不解释了。...setTimeout 模拟 setInterval 综上所述,在某些情况下,setInterval 缺点是很明显的,为了解决这些弊端,可以使用 setTimeout() 代替。...() {}, 20); 3.终止定时器 if (timer) { window.clearSetTimeout(timer); timer = null; } 参考 为什么要用 setTimeout

1.2K10
  • 前端进阶之setTimeout 为什么会出现误差?

    microtask) process.nextTick promise Object.observe(曾经是提案,如今已经废除) MutationOberver 宏任务(macrotask) script setTimeout...setImmediate I/O UI渲染 执行顺序如下: 执行同步代码,这是宏任务 执行栈为空,查询是否有微任务要执行 必要时渲染UI 进行下一轮的 EventLoop ,执行宏任务中的异步代码 setTimeout...我们看以下代码: setTimeout(function () { console.log('biubiu');}, 1000);某个执行时间很长的函数(); 如果定时器下面的函数执行要 5秒钟,...5秒之后再大圆,函数占用了当前 执行栈,要等执行栈执行完毕后再去读取 微任务(microtask),等 微任务(microtask) 完成,这个时候才会去读取 宏任务(macrotask) 里面的 setTimeout...还有一种情况如下: setTimeout(function() { console.log('嘤嘤嘤');}, 0); 因为 定时器 最小 delay 是 4毫秒,所以小于这个数字,即使 执行栈

    93510

    JavaScript中的回调函数(callback)

    回调函数被认为是一种高级函数,一种被作为参数传递给另一个函数(在这称作"otherFunction")的高级函数,回调函数会在otherFunction内被调用(或执行)。...; callback(name); } processUserInput(greeting); 异步回调函数: function ff(a, b, cbk) { setTimeout...为什么使用回调函数 我们都知道js是单线程的,这种设计模式给我们带来了很多的方便之处,我们不需要考虑各个线程之间的通信,也不需要写很多烧脑的代码,也就是说js的引擎只能一件一件事的去完成和执行相关的操作...3.setTimeout的延迟时间为0,这个hack经常被用到,settimeout调用的函数其实就是一个callback的体现 4.链式调用:链式调用的时候,在赋值器(setter)方法中(或者本身没有返回值的方法中...5.setTimeout、setInterval的函数调用得到其返回值。

    6.9K10

    ES6 Promise用法小结

    :执行了一个异步操作,也就是setTimeout,2秒后,输出“执行完成”,并且调用resolve方法。...return p } 刷新页面的时候是没有任何反映的,但是点击后控制台打出 当放在函数里面的时候只有调用的时候才会被执行 那么,接下里解决两个问题: 1、为什么要放在函数里面 2、resolve...它将大于10的情况下的失败回调的原因输出,但是,它还有另外一个作用:在执行resolve的回调(也就是上面then中的第一个参数)时,如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个...如果我们不用Promise,代码运行到这里就直接在控制台报错了,不往下运行了。但是在这里,会得到上图的结果,也就是说进到catch方法里面去了,而且把错误原因传到了reason参数中。...即便是有错误的代码也不会报错了 all的用法 与then同级的另一个方法,all方法,该方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后并且执行结果都是成功的时候才执行回调。

    32120

    为什么会有“建议MySQL单表数据控制在2000W”的说法?

    前言经常听到“建议MySQL单表数据控制在2000W”这样的说法,这个说法的背后是因为表数据量过大会导致查询性能低下。那么2000W是怎么来的?行记录是如何存储的?...图中的「用户数据」可以存放多少行记录是至关重要的,因为它关系到“单表数据控制在2000W”的这个说法是否成立。那么,索引页和数据页可以存放多少行记录?数据页可以存放多少行记录?...基于以上的情况,InnoDB是如何以索引组织2000W数据的?InnoDB如何以索引组织2000W数据?以B+tree索引结构为例,其叶子结点是数据页,非叶子结点为索引页。...如果树的高度为3,2层索引页和1层数据页,那么可以存放1098*1098*15≈2000W行记录。...总结综上所述,“建议MySQL单表数据控制在2000W”是根据每行记录大小为1KB估算的,并非一个标准,还是要根据实际情况去决定单表的数据量。

    12610

    Promise用法及使用案例

    console.log('执行完成'); resolve('数据'); }, 2000); }); 在上面的代码中,我们执行了一个异步操作,也就是setTimeout,2秒后,输出...(function(){ console.log('执行完成'); resolve('数据'); }, 2000); });...不过它还有另外一个作用:在执行resolve的回调(也就是上面then中的第一个参数)时,如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法中。...如果我们不用Promise,代码运行到这里就直接在控制台报错了,不往下运行了。...即便是有错误的代码也不会报错了,这与我们的try/catch语句有相同的功能。 all的用法 Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。

    48530

    链式操作的用法reject的用法catch的用法all的用法race的用法

    console.log('执行完成'); resolve('随便什么数据'); }, 2000); }); Promise的构造函数接收一个参数,是函数,并且传入两个参数:resolve...(function(){ console.log('执行完成'); resolve('随便什么数据'); }, 2000); })...不过它还有另外一个作用:在执行resolve的回调(也就是上面then中的第一个参数)时,如果抛出异常了(代码出错了),那么并不会报错卡死js,而是会进到这个catch方法中。...如果我们不用Promise,代码运行到这里就直接在控制台报错了,不往下运行了。但是在这里,会得到这样的结果: ? 也就是说进到catch方法里面去了,而且把错误原因传到了reason参数中。...即便是有错误的代码也不会报错了,这与我们的try/catch语句有相同的功能。 all的用法 Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。

    4.4K20
    领券