javascript";加上;结构生成未定义的变量

javascript";加上;结构生成未定义的变量,javascript,Javascript,我有一个名为totalRevenue的对象,负责每月存储公司的累计收入 var totalRevenue = { jan : 147, feb : 290, mar : 400 }; 并非所有月份名称都出现在totalRevenue对象中&它们是在填充/估计各自的值时动态创建的。 在每个月初,我们使用算法估计当月的收入。像这样的事情: with(totalRevenue){ mar = mar - feb; // here we calculate pu

我有一个名为totalRevenue的对象,负责每月存储公司的累计收入

var totalRevenue = {
    jan : 147,
    feb : 290,
    mar : 400
    };
并非所有月份名称都出现在
totalRevenue
对象中&它们是在填充/估计各自的值时动态创建的。 在每个月初,我们使用算法估计当月的收入。像这样的事情:

with(totalRevenue){
    mar = mar - feb; // here we calculate pure mar revenue
    feb = feb - jan; // here we calculate pure feb revenue
    apr = mar - feb; // this is part one of the algo.       
}
(我将
构造一起使用,以避免重复。)
现在我使用
totalRevenue.apr
进行其余的algo计算。但是经过一些挑战,我得到了
totalRevenue.apr=undefined


有人知道为什么吗?!正如我所期望的那样,它的值等于
mar-feb

如果
apr
不是
totalRevenue
的属性,那么它不会被
纳入范围,您的代码将创建一个名为
apr
的新全局属性。解释器无法知道给定名称是指全局名称,还是指最近的
块的未定义属性,因此假设它是全局名称。您可以确保
totalRevenue
每个月都有一个属性,或者完全避免使用with语句。不鼓励将
一起使用,原因如下:

不建议使用with语句,因为它可能会导致混淆错误和兼容性问题。有关详细信息,请参见下面“说明”部分中的“歧义对照”一段


此外,您不能按顺序计算值。一旦修复了with问题,您将获得错误的apr值。