Как движок javascript выполняет замыкания внутри нескольких вложенных функций?
У меня была некоторая путаница с закрытиями, ниже приведен сценарий, проблема и код. Пожалуйста, Запустите свой код в Chrome, Если вы хотите действительно протестировать его
Поэтому я создал глубокие вложенные функции. Есть функция четырех вложенных функций четыре() вложен -&ГТ; внутри функция три() вложенные -&ГТ; внутри функции двух() вложенные -&ГТ; внутри функции().
function one() { var oneVar = "_oneVar_"; return function two() { var twoVar = "_threeVar_";; return function three() { var threeVar = "_threeVar_"; return function four() { threeVar; twoVar; oneVar; } } } } // Run code in Chrome specifically to check [[Scopes]] // Other browser like Firefox does not show Scopes console.dir(one); console.dir(one()); console.dir(one()()); console.dir(one()()());
Поэтому, когда я запускаю код и проверяю результаты в инструментах разработчика Chrome, я наблюдаю, что замыкания в [[Scopes]] были созданы не только для функции четыре, но и для функции три и функции два. Это выглядит так, как если бы при объявлении локальных переменных, которые были вне этой области действия функции, функция продолжала выходить из своей функциональной области и продолжала искать локальную переменную, и в каждой функциональной области она продолжала передавать ее, создавая замыкания для каждой функции, пока не нашла переменную.
Так что же именно происходит под капотом ? Теперь я не уверен, связано ли это поведение с JavaScript или это как-то связано с инструментами Chrome Dev.
Что я уже пробовал:
Я погуглил еще не нашел ответа :(