почему в ниже лежащей функции конечное значение переменной равно первоначальному? Хотя во внутренней функции данной переменной присвоено другое значение посредством замыкания? Как сделать, что бы сохранялось новое значение?
function s(){
var a = 1;
function d(c){
console.log(c);
c = 2;
console.log(c);
}
d(a)
console.log(a)
}
вывод в консоль:
s()
1
2
1
Ответ
Потому что примитивные значения (строки, числа, булевы значения, null/undefined) передаются в качестве аргументов по значению, а не по ссылке.
Т.е. грубо говоря ваш аргумент c - это не ссылка на переменную а, это новая переменная c, со значением которое вы туда передали.
Если сделать объект, то он будет передаваться по ссылке -
function s(){
var a = {b:1};
function d(c){
console.log(c.b);
c.b = 2;
console.log(c.b);
}
d(a);
console.log(a.b)
}
s();
Смысл замыкания как раз в том, что вы делаете одну функцию внутри другой, и из неё видно все локальные переменные родительской функции. вам не надо ничего никуда передавать чтоб с ними работать:
function s(){
var a = 1;
function d(){
console.log(a);
a = 2;
console.log(a);
}
d(a);
console.log(a)
}
s();
Замыкание — это особый вид функции. Она определена в теле другой
функции и создаётся каждый раз во время её выполнения. При этом
вложенная внутренняя функция содержит ссылки на локальные переменные
внешней функции.
(с) Википедия
Комментариев нет:
Отправить комментарий