Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
变量不更新Javascript_Javascript_Variables - Fatal编程技术网

变量不更新Javascript

变量不更新Javascript,javascript,variables,Javascript,Variables,我有一个变量x,在我的程序中,它会被更改几次。变量y也是。但是我需要变量xy 设x=1; 设y=1; 设xy='X'+X+'Y'+Y//应该看起来像X1Y1 x+=1; y+=1; 控制台日志(xy); //输出仍然是X1Y1,而不是X2Y2,就像我想要的那样这是因为您正在将xy变量设置为x=1和y=1,然后在声明变量后更改变量。如果要返回具有更新值的字符串,请使用函数 let x = 1 let y = 1 function returnString(x, y) { return

我有一个变量x,在我的程序中,它会被更改几次。变量y也是。但是我需要变量xy

设x=1;
设y=1;
设xy='X'+X+'Y'+Y//应该看起来像X1Y1
x+=1;
y+=1;
控制台日志(xy);

//输出仍然是X1Y1,而不是X2Y2,就像我想要的那样
这是因为您正在将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的预期行为。 因为在生成xy字符串时使用了变量x和y。请注意,xy的引用未被保存,因此当x或y发生变化时,xy会被更新

更合适的解决方案是使xy起作用

设xy=()=>('X'+X+'Y'+Y)


如果您确实想要看起来像您想要的东西,并且避免使用()函数,那么您也可以在对象中使用getter,或者在窗口中使用更难定义的getter

在对象中:

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
   }
})