我无法对此找到合适的解释。
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);
删除参数似乎可以解决问题。为什么?
当参数最终由setTimeout
调用时,您尚未将参数传递给函数回调。
setTimeout
接受延迟后传递的函数回调的参数,在您的情况下为1000
之后。
[不传递参数,x
和y
自变量的作用域是函数回调。它不会从外部作用域获取值,因为它已被给定的函数参数遮盖。
function subtract(x, y) {
setTimeout(function(x, y) {
document.write(x - y);
}, 1000, 1, 1);
}
subtract(1, 1);
这是一个JavaScript参考问题https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout
[下-他们提到同一问题的“ this”问题部分