gpt4 book ai didi

javascript - 不带回调函数的 SetTimeout() 调用行为异常

转载 作者:搜寻专家 更新时间:2023-11-01 00:47:35 25 4
gpt4 key购买 nike

我刚刚尝试使用 settimeout() 函数,并在一次尝试中写下了以下代码:

console.log(setTimeout('a', 1000));

当我执行此语句时,我在控制台上收到以下输出: enter image description here

我明白错误 a is undefined 出现是因为 setTimeout() 需要一个函数作为它的第一个参数,但为什么我在安慰。我相信这是自 setTimeout() 命令在当前 session 中首次执行以来经过的秒数。我对此是否正确?有人可以更详细地解释一下吗。

最佳答案

您在控制台中看到的数字是 setTimeout() 调用返回的 ID,稍后您可以使用它来清除超时即取消它。

例如:

const id = setTimeout(console.log, 1000, "this is cancelled");
clearTimeout(id); //cancelling the earlier timeout
setTimeout(console.log, 1000, "this is not cancelled");

来自 MDN docs :

The returned timeoutID is a positive integer value which identifies the timer created by the call to setTimeout(); this value can be passed to clearTimeout() to cancel the timeout.

还有 setTimeout() 的一种变体,它的行为类似于 eval() 函数,不推荐使用,并且被大多数安全扫描工具标记为需要一个字符串表达式并将表达式计算为 JavaScript 代码,并在计时器到期后立即执行,例如:

const id = setTimeout("console.log('cancelled')", 1000);
clearTimeout(id);
setTimeout("console.log('not cancelled')", 1000);

在您的代码中,您在传递 'a' 时使用了此变体,您得到了错误,因为当解释器评估您的字符串时,它找不到变量 a在当前范围内。

const a = 'This is a';
setTimeout('console.log(a)', 1000);

关于javascript - 不带回调函数的 SetTimeout() 调用行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57451918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com