JavaScript. Замыкание. Свободные переменные

359
16 октября 2017, 00:40

Привет всем. Изучаю JavaScript. Остановился на теме "Замыкание". Есть код

window.onload = function()
{
    var button = document.getElementById("clickme");
    var div = document.getElementById("message");
    var message = "You clicked me ";
    var count = 0;
    button.onclick = function()
    {
        count ++;
        div.innerHTML = message + count + " times!";
    }
};

В книге написано что в этот код содержит три свободные переменные div, message, count.

Вопрос А почему button не является свободным?

Простите за такой элементарный вопрос.

Answer 1

Нашел определение, что "свободные переменные — это переменные, которые не объявлены локально и не передаются в качестве параметра". Если посмотреть в замыкание, то мы ссылаемся на message, div и count, которые как раз не передаются как параметры в замыкание и не объявлены в нем локально.

Позже заглянул в инструменты разработчика и обнаружил, что this хранит ссылку на button и считается локальной переменной. Получается, что button скорее контекст исполнения функции нежели переменная переданная в замыкание, что логично ведь мы пишем button.onclick, где onclick функция-замыкание, а button - объект в контексте которого она вызывается.

Поправьте, если я ошибаюсь.

READ ALSO
библиотека Rxjs

библиотека Rxjs

в чем отличие mergeMap() от flatMap()? mergeMap() нужен для слияния потока или как?

250
выбор и обработка div блоков jquery

выбор и обработка div блоков jquery

Здравствуйте, в верстке есть динамическое количество div блоков с классомour-services

206
простая задачка JS

простая задачка JS

Прога должна выявить сколько дней осталось до нового года! В чем заключается моя ошибка?

202
как сделать запрос на сторонний домен, используя node js?

как сделать запрос на сторонний домен, используя node js?

задачи состоит в том, чтобы сделать ajax запрос на сторонний доменвозможно это сделать используя модуль request? можно увидеть конкретный пример,...

220