#javascript #closures #settimeout
Вопрос:
function test(str) { setTimeout(() =gt; { console.log(str); }, 10000); } let i = "1"; test(i); //test 1 console.log(i, "sync"); i = "2"; test(i); //test 2 console.log(i, "sync");
Это из-за закрытия, что тест 1 и 2 печатают 1 и 2 последовательно? Если я не напишу setTimeout внутри функции, результатом будет последнее значение i
Комментарии:
1.
console.log
вход или выход из негоsetTimeout
будет одинаковым, так как переданное значениеtest
копируется, поэтому изменение исходной переменнойi
не повлияет на него2. Это из-за закрытия?
3.
1
и2
регистрируются последовательно , потому что вы сначала передаете1
в качестве параметра первыйtest
вызов функции и2
второй вызов функции. Функция обратногоsetTimeout
вызова имеет закрытие поstr
параметру, но порядок вывода не из-за закрытия.4. большое вам спасибо за разъяснение @Yousaf