Есть:
var a = 5;
var b = 10;
var c = a + b;
console.log(c);
a = 15;
console.log(c);
Почему второй вывод в консоль не считает заново "с"? Как заставить?
JavaScript
Javascript, как быть с переменными?
Так !
c=()=>a+b;
a = 5;
b = 10;
console.log(c());
a = 15;
console.log(c());
⚤
c=()=>a+b;
a = 5;
b = 10;
console.log(c());
a = 15;
console.log(c());
⚤
Вот простой пример. Посмотри на часы (работающие), и запиши время с них на листочек бумаги. Через несколько минут, сравни показания часов с записанным временем. Попробуй заставить бумагу менять запись на ней, при каждом изменении времени на часах. Время, в обоих случаях - это значения. Запись на листочек - это операция с результатом. Бумага (переменная/константа) содержит значение, которое ты поместил, но не выполненную операцию. Если не понимаешь этого, или не видишь связи с кодом в вопросе - прими поздравления с тем что ты идиот... извини, ничего личного.
Во многих языках (и в JS тоже), есть такие штуки как ссылки, и геттеры свойств. Они работают примерно так как ты ожидаешь от переменных в данном случае, но есть важный нюанс: чтобы операция выполнялась автоматически, она должна быть формализована, должен быть код, указание компьютеру выполнять операцию. Сам он "догадаться" не может - компьютер это всего лишь машина, которая выполняет в точности то, что ты ей скажешь.
Во многих языках (и в JS тоже), есть такие штуки как ссылки, и геттеры свойств. Они работают примерно так как ты ожидаешь от переменных в данном случае, но есть важный нюанс: чтобы операция выполнялась автоматически, она должна быть формализована, должен быть код, указание компьютеру выполнять операцию. Сам он "догадаться" не может - компьютер это всего лишь машина, которая выполняет в точности то, что ты ей скажешь.
Ваня Охотниченко
Пример хороший... Контрпример: а вы с Excel знакомы?
потому что надо заново дать команду присвоения c = a + b
С переменными все замечательно, а с логикой - нет.
var c = a + b;
console.log(c);
a = 15;
c = a+b; // заставить здесь
console.log(c);
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());
вызывать как c()
console.log(c());
присвоение переменной только один раз работает. Оберни в функцию (они для этого и созданы в общем то) как выше посоветовали
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);
myVars.__defineGetter__('c', function() { return this.a + this.b });
console.log(myVars.c);
myVars.a = 15;
console.log(myVars.c);
Потому что c=a+b не есть передача значения по ссылки
Бежан Шохмуродзода
А не покажите, как передача значения по ссылке решит эту проблему? Очень интересно, я реально этого не знаю. Меня даже устроит С++, несмотря на то, что речь про JS.
Похожие вопросы
- глобальные/локальные переменные в JavaScript
- Целесообразно ли хранение синтаксиса javascript в переменной?
- Помогите с JavaScript (локальные/глобальные переменные/функции)
- JavaScript. Как проверить, была ли определена переменная?
- Видимость переменной JavaScript
- Как удалить переменную в javascript ?
- JavaScript как правильно присвоить дату в переменную?
- Вопрос по типу переменной на javascript
- Есть ли аналоги JavaScript?
- С чего начать учить JavaScript?