Затруднения трудно объяснить, потому что они используются, чтобы сделать какую-то работу по поведению, которую все интуитивно ожидают, чтобы работать в любом случае. Я нахожу лучший способ объяснить их (и то, как I узнал, что они делают) представляет собой ситуацию без них:
var bind = function(x) {
return function(y) { return x + y; };
}
var plus5 = bind(5);
console.log(plus5(3));
Что произойдет, если JavaScript не знает закрытие? Просто замените вызов в последней строке телом метода (который в основном выполняет вызовы функции), и вы получите:
console.log(x + 3);
Теперь, где определение x
? Мы не определяли его в текущей области. Единственное решение состоит в том, чтобы позволить plus5
переносить свою область (или, точнее, область ее родителя) вокруг. Таким образом, x
четко определен и привязан к значению 5.