Javascript变量未加在一起

时间:2019-02-21 21:13:54

标签: javascript

简单的javascript可能是我缺少的简单解决方案。

var x = 0;
var y = 0;
var z = 0;

z = x + y;

y += 5;

console.log('x', x)
console.log('y', y)
console.log('z', z)

控制台显示y = 5; 但控制台显示z = 0;

z现在不应该等于5吗?

5 个答案:

答案 0 :(得分:2)

假设您希望y等于5,则需要先更新z,然后再更新z

// x, y, and z are 0
var x = 0;
var y = 0;
var z = 0;

// y is 5
// this is equivalent to y = 5, because y starts at 0 anyway
y += 5;

// z = 0 (x) + 5 (y)
z = x + y;

或者,您可以使用以下函数在运行时评估z的计算结果:

// x, y, and z are 0
var x = 0;
var y = 0;
var z = 0;    
function getZ() {
    return x + y
}

// z = 0 (x) + 0 (y) = 0
console.log(getZ());

// y is 5
// this is equivalent to y = 5, because y starts at 0 anyway
y += 5;

// z = 0 (x) + 5 (y) = 5
console.log(getZ());

您可以在Function上详细了解NumberMozilla Developer Network类型。

答案 1 :(得分:0)

因为z将获得当前值xy,而Javascript将按从上到下的顺序执行您的代码。 Read more here

var x = 0;
var y = 0;
var z = 0;

function addXAndY(){
  return x + y;
}
z = addXAndY();

y += 5;

console.log('x', x)
console.log('y', y)
console.log('z', z)

z = addXAndY();
console.log('new z', z) //this will return 5 since you added a new value to y

答案 2 :(得分:0)

在您当前的方法中:

var x = 0;
var y = 0;
var z = 0;
z = x + y;

在评估变量z时,它将使用存储在变量xy上的当前值。那时,0x的值均为y,因此z将存储0(结果0 + 0)。将来对变量xy进行的更改不会更改存储在z上的值。但是,如果要保留两个变量xy的和的更新值,可以将z定义为一个函数。然后,您可以随时调用该函数以获取更新的值。示例:

var x = 0;
var y = 0;
var z = () => x + y;
y += 5;
console.log("x: " + x, "y: " + y, "z: " + z());
x += 3;
console.log("x: " + x, "y: " + y, "z: " + z());
x += 22;
console.log("x: " + x, "y: " + y, "z: " + z());

答案 3 :(得分:0)

执行var z = x + y时,您将z设置为xy当前总和。从那时起,z就是0。它不再引用xy

如果您希望在使用时连续计算z的值 ,那么您可能希望使用一个函数:

var x = 0;
var y = 0;
var z = () => x+y;  //function z() { return x+y; }

console.log( z() );

x = 5;
y = 3;

console.log( z() );

答案 4 :(得分:0)

这是一个如何与吸气剂一起工作的简单示例:

泰勒·罗珀(Tyler Roper)已经提到他们了。

var obj = {
  x: 0,
  y: 0,
  get z() {
    return this.x + this.y
  }
};

console.log(obj);

obj.y += 5;

console.log("obj.y += 5");
console.log(obj);

obj.x = 3;

console.log("obj.x = 3");
console.log(obj);
.as-console-wrapper{top:0;max-height:100%!important}

在这里,我将getter与一个简单的对象(文字)一起使用,但是您也可以在某个类(原型)上定义它们,以便在所有实例之间共享。