Переменная name
сохраняется в замыкании, созданном
function activator(){
console.log( "Activating: " + name );
}
Поэтому, когда вы нажимаете на соответствующий селектор, он записывает это имя.
Переменная selector
не упоминается в функции, поэтому его не нужно сохранять в замыкании.Он просто используется во время начального выполнения setupBot()
.
Закрытие создается всякий раз, когда функция содержит использование переменной, объявленной вне функции, и функция возвращается или сохраняется где-то (в данном случае этосохранено в прослушивателе события нажатия).
function setupBot(name, selector) {
$(selector).click(function activator() {
console.log("Activating: " + name);
});
}
setupBot("Closure Bot 1", "#bot_1");
setupBot("Closure Bot 2", "#bot_2");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="bot_1">Bot 1</button>
<button id="bot_2">Bot 2</button>