В чем преимущества замыкания в примере?

Задача привязать контекст к определенной функции

Решение с замыканием:

const Person = {
 name: "Jhon",
 job:"programmist",
}

function logPerson () {
console.log(`Person: ${this.name}, ${this.job}`)
}

function bind(context, fn){
return function () {
fn.apply(context);
}

}

var bind =  bind(Person, logPerson);
bind();
console.log(bind);

Решение без замыкания:

const Person = {
 name: "Jhon",
 job:"programmist",
}

function logPerson () {
console.log(`Person: ${this.name}, ${this.job}`)
}

function bind(context, fn){
return fn.apply(context);


}

bind(Person, logPerson);

Не могу понять в чем преимущество первого решение с замыканием. В том, что функцию в переменную можно положить?

P.S. буду благодарен если объясните какие впринципе есть преимущества использования замыканий. Есть пример с счетчиком, где замыкание происходит на переменной

function makeCounter() {
  var currentCount = 1;

  return function() { 
    return currentCount++;
  };
}

var counter = makeCounter(); 


alert( counter() ); // 1
alert( counter() ); // 2
alert( counter() ); // 3

Но тут как бы понятно, что преимущество в том, что эту переменную никак нельзя изменить вне функции. В чем еще преимущества использования замыканий?


Ответы (1 шт):

Автор решения: Grundy

В приведенном примере разницы нет, так как функции выполняются сразу же в месте объявления, следовательно в момент вызова функции ей доступны все переменные, что и в момент создания.

Разница появляется, как только место объявления и вызова разносятся.

Преимущество замыканий в том, что в момент выполнения функция может обращаться к переменным, которые доступны в момент создания, но могут быть недоступны в месте вызова.

Пример демонстрируется в коде PS c функцией counter: В месте создания ей доступна переменная currentCount, в месте вызова - уже недоступна.

→ Ссылка