У меня есть переменная x, которая будет изменяться несколько раз на протяжении всей моей программы. И у меня есть переменная y, которая тоже будет. Однако мне нужна переменная xy.
let x = 1;
let y = 1;
let xy = 'X' + x + 'Y' + y //should look like X1Y1
x += 1;
y += 1;
console.info(xy);
//the output is still X1Y1 and not X2Y2 like I want itЯ уверен, что это простой ответ, но я не могу найти решение, поэтому любая помощь приветствуется.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это потому, что вы устанавливаете переменную xy с x = 1 и y = 1, а затем меняете переменную после того, как она была объявлена. Если вы хотите вернуть строку с обновленными значениями, используйте функцию
let x = 1
let y = 1
function returnString(x, y) {
return `X${x}Y${y}`
}
returnString(x, y)
Это потому, что xy присваивается буквальное значение, а не «шаблон», так сказать, о котором вы думаете. xy присвоены жестко запрограммированные значения X1Y1.
Если вы хотите сделать то, что предлагаете, вам нужно использовать функцию, например:
let z = (a,b) => 'X' + a + 'Y' + b;
так что всякий раз, когда вы хотите получить значение, вы вызываете z-функцию.
Это в значительной степени точный вариант использования функции практически на любом языке программирования.
let x = 1;
let y = 1;
let xy = () => 'X' + x + 'Y' + y;
x += 1;
y += 1;
xy(); // 'X2Y2'
Это ожидаемое поведение javascript. Поскольку переменные Икс и у используются при генерации строки ху. Обратите внимание, что никакая ссылка на Икс или у не была сохранена, так что ху обновляется при изменении x или y.
Более правильным решением было бы сделать функцию ху.
let xy = () => ('X' + x + 'Y' + y);
Если вам действительно нужно что-то похожее на то, что вы хотите, и избегайте использования (), вместо функции вы также можете использовать геттер в объекте или, что сложнее, определить в окне.
В объекте:
var obj = {
get xy() {
return "X" + x + "Y" + y
}
}
var x = 1, y = 1
alert(obj.xy) // 'X1Y1'
x++; y++;
alert(obj.xy) // 'X2Y2'
В окне:
Object.defineProperty(window, 'xy', {
get: function() {
return 'X' + x + 'Y' + y
}
})