Страницы

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

суббота, 11 января 2020 г.

Замыкания в javascript, почему не работает?

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

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

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