Я нашел этот пример закрытия в codeproject, но он не объясняет, как это работает.
function getMultiplier(multiplyBy){
function multiply(num){
return multiplyBy * num;
}
return multiply;
}
var multiplyByTwo = getMultiplier(2);
var multiplyByTen = getMultiplier(10);
var twoIntoFive = multiplyByTwo(5);
var tenIntoSix = multiplyByTen(6);
console.log(twoIntoFive); // 10
console.log(tenIntoSix); // 60
Теперь я собираюсь предположить, что происходит с моим мозгом C. Пожалуйста, поправьте меня или дайте свое объяснение.
- функции в javascript также могут быть объектами, поэтому внутренняя функцияmultiplier(num) является методом getMultiplier, смотрящим снаружи.
- varmultiplierByTwo присваивается возвращаемое значение функции getMultiplier при вызове с аргументом 2.
- когда вы вызываете getMultiplier(2), интерпретатор javascript создает объект в памяти на основе определения getMultiplier().
- этот объект имеет метод, умножить и его адрес присваивается переменной, умножитьByTwo.
- var twoIntoFive = умножить на два (5); вызывает метод объекта getMultiplier(2)multiplier(num) с аргументом 5.
- который возвращает простое число 10 в переменную twoIntoFive
- умножить на два = 0; заставит сборщик мусора javascript удалить объект getMultiplier(2) из памяти.