Сохраняет ли setInterval значение выражения / код, данный для выполнения? - PullRequest
0 голосов
/ 03 октября 2018

Когда мы выполняем setInterval с переменными функции в консоли и после этого мы меняем определение переменной функции.Даже сейчас старый код выполняется в setInterval. Сохраняет ли setInterval старое значение ...?

var funA = function(){document.write("Hello</br>");};
setInterval(funA,1000);

После запуска вышеуказанного кода в консоли Hello записывается в документе.Через некоторое время я запускаю следующий код:

var funA = function(){document.write("Bye</br>");};

Но все же я получаю запись Hello в документе, даже если определение функции funA изменилось.

Другое наблюдение состоит в том, что, если я повторно выполню setInterval, тогда я тоже получу Bye.

setInterval(funA,1000);

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Сохраняется не «контекст», а ссылка на функцию, которая была первоначальным определением funA.Если вы хотите динамически изменить функцию, вам нужно будет создать батут .

var funA = function() {document.write("Hello</br>");};
var funB = function() {document.write("Bye");};
var myTrampoline = {target: funA};

function callTrampoline() {return myTrampoline.target();};
setInterval(callTrampoline,1000);
myTrampoline.target=funB;

Теперь будет вызвана вторая функция, потому что вы обновили ссылку.

0 голосов
/ 03 октября 2018

Вы просто присвоили новую функцию тому же имени переменной.setInterval все еще имеет ссылку на предыдущую функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...