#javascript #функции #замыкания
почему в ниже лежащей функции конечное значение переменной равно первоначальному?
Хотя во внутренней функции данной переменной присвоено другое значение посредством
замыкания? Как сделать, что бы сохранялось новое значение?
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
Ответы
Ответ 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(); Замыкание — это особый вид функции. Она определена в теле другой функции и создаётся каждый раз во время её выполнения. При этом вложенная внутренняя функция содержит ссылки на локальные переменные внешней функции. (с) Википедия
Комментариев нет:
Отправить комментарий