Ваша внутренняя функция - fonction
перетаскивает с собой запись переменных со своими значениями из своей лексической области (ссылающейся среды), когда она возвращается из включающей ее функции - multiplicationParDeux
или выполняется вне своей собственной лексической области.
Когда вы возвращаете fonction
, вы можете представить его закрытие как объект со следующими свойствами, который служит связыванием для свободных переменных внутри fonction
.
chiffre: 20,
multiplicateur: 10
И каждый разfonction
выполняется, он обращается к этому закрытию, если он содержит привязки для своих свободных переменных (chiffre
и multiplicateur
), и, поскольку это происходит, результат действительно равен 200.
Важное замечание, выне создавайте замыкание, движок JS делает так, чтобы оно не создавалось во время разработки (хотя вы можете определить содержание замыкания, просто проверив лексическую область видимости функции), но когда движок JS выполняет ваш код и решает, что замыканиебудет необходимо.