Вы не передали параметры в обратный вызов функции, когда обратный вызов в конечном итоге вызывается setTimeout
, x
и y
равны undefined
.
Итак, вы видите NaN
в качестве вывода, потому что undefined - undefined
равно NaN
.
setTimeout
принимает параметры обратного вызова функции, которые вы передали после аргумента delay
, в вашем случае после 1000
.
Без передачи параметров переменные x
и y
привязаны к функции обратного вызова. Он не будет принимать значения из внешней области видимости, поскольку она затенена заданными вами параметрами функции.
function subtract(x, y) {
setTimeout(function(x, y) {
document.write(x - y);
}, 1000, 1, 1);
}
subtract(1, 1);
Вы также можете использовать Function.prototype.bind
для передачи параметров функции обратного вызова.
bind
принимает контекст this
в качестве первого аргумента, а остальные аргументы являются параметрами функции. В моем примере я дал null
как контекст this
:
function subtract(x, y) {
setTimeout(function(x, y) {
document.write(x - y);
}.bind(null,1,1), 500);
}
subtract(1, 1);