JavaScript Присвоение функции переменной
При присвоении функции переменной, в переменной хранится тело функции или результат ее вызова?
Например:
function addN(n) {
let adder = function(x) {
return n + x
}
return adder
}
let a = addN(2)
При вызове a, будет заново создаваться функция с подставлением аргумента вместо n или в a уже хранится adder со значением n=2?
Ответы (2 шт):
Сколько нужно времени, чтобы это выяснить?
function addN(n) {
let adder = function(x) {
return n + x
}
return adder
}
let a = addN(2)
console.log(a);
console.log(a(1),a(2),a(3));
function addN(n) {
let adder = function(x) { // (*1)
return n + x;
}
return adder;
}
let a = addN(2);
console.log( a(3) );
Как и все другие переменные-имена функций. Хранят не прямо объект функции, а адрес этой функции в памяти.
При вызове addN(2) создается функция (*1), и через return adder; ссылка на эту функцию попадает в переменную a. Каждый раз, когда вызывают a() — не создается новая функция, а вызывается ранее созданная (*1), которая начинает искать ближайшую переменную с названием n и находит её в своем окружении (параметр addN(n))