В моей программе 2 JS файлов, и один вызывает функцию в другом файле и передает ей два аргумента. Никаких проблем - l oop во 2-м файле работает как положено - пока не завершится. Я делаю нечто подобное в другой части моего приложения без каких-либо проблем.
Код из файла 1 (этот l oop вызывается из события на странице - он возвращает функцию, поэтому я могу включить аргументы без вызова функции):
let loopStat = false;
let j = 0;
const sleep = (milliseconds) => {
return new Promise(resolve => setInterval(resolve, milliseconds))
}
const callLoop = (item) => {
return function() {
loopStat = !loopStat;
loopFunc(loopStat, item);
}
}
const loopFunc = async (z, item) => {
console.log('before loop', z);
while (z == true) {
console.log('inside loop', z);
j++;
console.log(j);
await sleep(1000);
}
}
var button = document.getElementById('button')
button.addEventListener("click", callLoop(button));
<div id="parent">
<button id="button">Loop</button>
</div>
Очевидно, "z" используется для завершения l oop в этой функции. Я включил биты console.log, чтобы показать, что такое z в разных точках. При повторном нажатии кнопки она переключает переменную loopStat в значение false, снова вызывает функцию и отправляет этот аргумент. Странно то, что новый аргумент отправляется функции (как показано в 'before l oop' console.log), но внутри l oop он меняет "z" обратно на true, как показано на "inside l oop" console.log.
Я также думаю, что стоит упомянуть, что переменные "z" и "loopStat" больше нигде в приложении не используются.
I Я ожидаю, что решение будет чем-то очевидным, и я подозреваю, что это проблема масштаба.