JavaScript

Javascript, как быть с переменными?

Есть:
var a = 5;
var b = 10;
var c = a + b;
console.log(c);
a = 15;
console.log(c);

Почему второй вывод в консоль не считает заново "с"? Как заставить?
Так !

c=()=>a+b;
a = 5;
b = 10;
console.log(c());
a = 15;
console.log(c());

Денис Арифулин
Денис Арифулин
94 375
Лучший ответ
Вот простой пример. Посмотри на часы (работающие), и запиши время с них на листочек бумаги. Через несколько минут, сравни показания часов с записанным временем. Попробуй заставить бумагу менять запись на ней, при каждом изменении времени на часах. Время, в обоих случаях - это значения. Запись на листочек - это операция с результатом. Бумага (переменная/константа) содержит значение, которое ты поместил, но не выполненную операцию. Если не понимаешь этого, или не видишь связи с кодом в вопросе - прими поздравления с тем что ты идиот... извини, ничего личного.
Во многих языках (и в JS тоже), есть такие штуки как ссылки, и геттеры свойств. Они работают примерно так как ты ожидаешь от переменных в данном случае, но есть важный нюанс: чтобы операция выполнялась автоматически, она должна быть формализована, должен быть код, указание компьютеру выполнять операцию. Сам он "догадаться" не может - компьютер это всего лишь машина, которая выполняет в точности то, что ты ей скажешь.
Ваня Охотниченко Пример хороший... Контрпример: а вы с Excel знакомы?
потому что надо заново дать команду присвоения c = a + b
AB
Altyke Baike
67 550
С переменными все замечательно, а с логикой - нет.

var c = a + b;
console.log(c);
a = 15;
c = a+b; // заставить здесь
console.log(c);
Александр Евстафьев а если на месте "c=a+b" намного сложнее процесс?
var c=function(){return a+b}

вызывать как c()
console.log(c());
присвоение переменной только один раз работает. Оберни в функцию (они для этого и созданы в общем то) как выше посоветовали
Рустам Каюмов
Рустам Каюмов
4 161
let myVars = { a: 5, b: 10 };
myVars.__defineGetter__('c', function() { return this.a + this.b });

console.log(myVars.c);

myVars.a = 15;

console.log(myVars.c);
Потому что c=a+b не есть передача значения по ссылки
Бежан Шохмуродзода А не покажите, как передача значения по ссылке решит эту проблему? Очень интересно, я реально этого не знаю. Меня даже устроит С++, несмотря на то, что речь про JS.