Страницы

Поиск по вопросам

понедельник, 8 июля 2019 г.

Замыкания в 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


Ответ

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

Комментариев нет:

Отправить комментарий