简单的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吗?
答案 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
上详细了解Number
和Mozilla Developer Network类型。
答案 1 :(得分:0)
因为z
将获得当前值x
和y
,而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
时,它将使用存储在变量x
和y
上的当前值。那时,0
和x
的值均为y
,因此z
将存储0
(结果0 + 0
)。将来对变量x
和y
进行的更改不会更改存储在z
上的值。但是,如果要保留两个变量x
和y
的和的更新值,可以将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
设置为x
和y
的当前总和。从那时起,z
就是0
。它不再引用x
或y
。
如果您希望在使用时连续计算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与一个简单的对象(文字)一起使用,但是您也可以在某个类(原型)上定义它们,以便在所有实例之间共享。