Переменная не обновляет Javascript - PullRequest
0 голосов
/ 09 июня 2018

У меня есть переменная x, которая будет изменяться несколько раз по всей моей программе.И у меня есть переменная y, которая также будет.Однако мне нужна переменная xy.

let x = 1;
let y = 1;
let xy = 'X' + x + 'Y' + y //should look like X1Y1

x += 1;
y += 1;

console.log(xy);


//the output is still X1Y1 and not X2Y2 like I want it

Я уверен, что это простой ответ, но я не могу найти решение, поэтому любая помощь приветствуется.

Ответы [ 5 ]

0 голосов
/ 09 июня 2018

Если вы действительно хотите что-то похожее на то, что вы хотите, и избегайте использования (), вместо функции вы также можете использовать геттер в объекте или сложнее, определенном в окне.

В объекте:

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
   }
})
0 голосов
/ 09 июня 2018

Это ожидаемое поведение javascript.Поскольку переменные x и y используются при генерации строки xy .Обратите внимание, что ссылки на x или y не были сохранены, поэтому xy обновляется при изменении x или y.

Более правильным решением было бы сделать функцию xy .

let xy = () => ('X' + x + 'Y' + y);

0 голосов
/ 09 июня 2018

Это потому, что xy присваивается буквальное значение, а не «шаблон», так сказать, о котором вы думаете.xy присваиваются жестко запрограммированные значения X1Y1.

Если вы хотите сделать то, что вы предлагаете, вам нужно использовать функцию, такую ​​как:

let z = (a,b) => 'X' + a + 'Y' + b;            

, чтобывсякий раз, когда вы хотите получить значение, вы вызываете z-функцию.

0 голосов
/ 09 июня 2018

Это в значительной степени точный вариант использования функции, практически во всех языках программирования.

let x = 1;
let y = 1;

let xy = () => 'X' + x + 'Y' + y;

x += 1;
y += 1;

xy(); // 'X2Y2'
0 голосов
/ 09 июня 2018

Это потому, что вы устанавливаете переменную xy с x = 1 и y = 1, а затем изменяете переменную после ее объявления.Если вы хотите вернуть строку с обновленными значениями, используйте функцию

let x = 1
let y = 1

function returnString(x, y) {
    return `X${x}Y${y}`
}

returnString(x, y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...