Намерих този пример за затваряне на 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 също могат да бъдат обекти, така че вътрешната функция multiply(num) е метод на getMultiplier, гледан отвън.
- var multiplyByTwo се присвоява върнатата стойност на функцията getMultiplier, когато се извиква с аргумент 2.
- когато извикате getMultiplier(2), javascript интерпретаторът създава обект в паметта въз основа на дефиницията на getMultiplier().
- този обект има метод multiply и неговият адрес е присвоен на променлива multiplyByTwo.
- var twoIntoFive = multiplyByTwo(5); извиква метода на обекта getMultiplier(2) multiply(num) с аргумент 5.
- който връща просто число 10 в променлива twoIntoFive
- multiplyByTwo = 0; ще накара събирача на отпадъци на javascript да изтрие обект getMultiplier(2) от паметта.