setTimeout函数参数未定义(JS)

问题描述 投票:0回答:2

我无法对此找到合适的解释。

function subtract(x, y) {
    setTimeout(function(x, y) {
      document.write(x - y);
  }, 1000);
}

subtract(1, 1);

这会将NaN写入文档,因为传递给setTimeout的x和y参数是未定义的。您可能认为x和y应该是整数1,并且在减法函数的范围内。以下代码段可以正常工作,并按预期写入整数0:

function subtract(x, y) {
    setTimeout(function() {
      document.write(x - y);
  }, 1000);
}

subtract(1, 1);

删除参数似乎可以解决问题。为什么?

javascript settimeout
2个回答
1
投票

当参数最终由setTimeout调用时,您尚未将参数传递给函数回调。

setTimeout接受延迟后传递的函数回调的参数,在您的情况下为1000之后。

[不传递参数,xy自变量的作用域是函数回调。它不会从外部作用域获取值,因为它已被给定的函数参数遮盖。

function subtract(x, y) {
    setTimeout(function(x, y) {
      document.write(x - y);
  }, 1000, 1, 1);
}

subtract(1, 1);

0
投票

这是一个JavaScript参考问题https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout

[下-他们提到同一问题的“ this”问题部分

© www.soinside.com 2019 - 2024. All rights reserved.