почему в ниже лежащей функции конечное значение переменной равно первоначальному? Хотя во внутренней функции данной переменной присвоено другое значение посредством замыкания? Как сделать, что бы сохранялось новое значение?
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();
Замыкание — это особый вид функции. Она определена в теле другой функции и создаётся каждый раз во время её выполнения. При этом вложенная внутренняя функция содержит ссылки на локальные переменные внешней функции.
(с) Википедия
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Всем добрый день, при загрузке страницы $(window)load и изменении размера окна браузера $(window)
В require_once "blocks/headphp" находится подключение jquery + функция connect():