Отличается ли вывод из-за закрытия

#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