Всегда выводит 2 почему ?
var a = 1;
var b = 1 + a;
function test() {
a = 2
console.log(b)
return a
}
test()
console.log(b)
Хотя ожидаемый вами подход теоретически имеет право на существование (подобным образом ведут себя, например, формулы в ячейках Excel), большинство современных языков программирования устроены не так.
Переменная, образно говоря, просто хранит в себе кусок данных. Переменная ничего не знает про формулу, которая этот кусок данных вычисляет. Когда вы пишете b = 1 + a, вычисляется значение справа от знака = — это будет 2, а дальше это число 2 помещается в переменную b. Всё! В переменной b лежит число 2, и до тех пор, пока кто-нибудь не напишет b = ... ещё раз — эта двойка никуда не денется. Переменная b ничего не знает про 1 + a — оно вычислилось один раз во время работы этой строчки, и всё. Следовательно, когда вы напишете a = 2, в переменной b так и останется лежать двойка, а тройка там ниоткуда не появится, пока вы сами не запихнёте её туда.
Вычисление нового значения — это выполнение какого-то кода. После изменения переменной a вам нужно как-то явно запустить код, который вычислит новое значение. Способ «в лоб» — просто повторить этот код после изменения переменной a:
function test() {
a = 2
b = 1 + a
console.log(b) // Теперь будет 3
return a
}
Очевидно, что это решение не всегда удобно. Как более удобный вариант можно просто избавиться от переменной b и использовать вместо неё функцию — при каждом вызове функции будет каждый раз выполняться код, вычисляющий новое значение:
var a = 1;
function b() {
return 1 + a;
}
function test() {
a = 2
console.log(b()) // Будет 3
return a
}
console.log(b()) // Будет 2
test()
console.log(b()) // Будет 3
Однако если вычислений много и они медленные, то постоянные перевычисления могут привести к тормозам программы. Поэтому иногда может быть разумно поместить результат работы функции во временную переменную и использовать уже её (но нужно это делать осторожно):
var a = 1;
function b() {
return 1 + a;
}
function test() {
a = 2
console.log(b()) // Будет 3
return a
}
var old_b = b(); // Сохраняем результат вычисления в переменную
console.log(b()) // Будет 2
console.log(old_b) // Будет тоже 2
test()
console.log(b()) // Будет 3
console.log(old_b) // Будет 2, потому что переменную old_b никто не изменял
Проблемы нет: значение переменной b присваивается один раз.
var b = 1 + a;
Так как дальше переменная не изменяется странно рассчитывать на разный результат вызова
console.log(b);
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости