Это происходит из-за события l oop и того факта, что setTimeout
принимает функцию обратного вызова в качестве аргумента.
В основном порядок операций ниже
- Определена функция с именем x
- Вызывается функция x
- Вызывается функция setTimeout
- Объявляется постоянная переменная с именем message
- Обратный вызов вызывается функция, переданная в качестве аргумента SetTimeout.
- Вызывается метод журнала объекта консоли.
Первый фрагмент кода не регистрируется в консоли, потому что вы не вызов функции, определенной в функции x. Вы можете записать переменную в консоль в первом фрагменте кода, обратившись к переменной через closure
.
Это должно работать с первым фрагментом кода.
function x() {
const message = "hello"
return function() {
console.log(message)
}
}
x()()
Еще более простой Кстати, было бы просто вызвать функцию внутри функции:
function x() {
function log() {
console.log(message)
}
const message = "hello"
log()
}
x()