Всегда выводит 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);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть окно заказов за годПри нажатии на месяц открывается таблица заказов
У меня есть store со значениями, где хранятся типы данных и их обозначения с id и тд
Подскажите пожалуйста, есть код в котором по нажатию на span изменяется на input