почему значение i отображается неопределенным, когда получен вывод приведенного ниже кода - PullRequest
0 голосов
/ 07 марта 2020

let i = 0;

const g = (i, callback) => {
  if (i < 100) {
    callback(i)
    i++;
    g(i, callback)
  } else return
}

const k = (i) => {
  setTimeout((i) => {
    console.log('hi' + i);
  }, i * 1000);
}
g(i, k);

Это код, который использует обратный вызов для печати hi, объединенного значением i с интервалом в 1 секунду для 100 раз. я не могу определить, где это происходит. Это будет очень здорово, если кто-нибудь сможет мне помочь с этим.

1 Ответ

1 голос
/ 07 марта 2020

i внутри функции, переданной setTimeout, затеняет ту, которую k принимает в качестве аргумента. Таким образом, чтобы исправить фрагмент, вам просто нужно удалить аргумент обратного вызова:

let i = 0;

const g = (i, callback) => {
  if (i < 100) {
    callback(i)
    i++;
    g(i, callback)
  } else return
}

const k = (i) => {
  setTimeout(() => { // <------ I removed `i` here
    console.log('hi' + i);
  }, i * 1000);
}
g(i, k);
...