javascript“with”结构产生未定义的变量

时间:2017-02-25 06:25:05

标签: javascript

我有一个名为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.       
}

(我正在使用with构造来避免重复。)
现在我正在使用totalRevenue.apr进行其余的算法计算。但经过一些挑战,我得到了totalRevenue.apr = undefined !!
有谁知道为什么?!正如我所料,它的值等于mar - feb

1 个答案:

答案 0 :(得分:1)

如果apr不是totalRevenue的属性,则with不会将其置于范围内,您的代码将创建一个名为apr的新全局。解释器无法知道给定名称是指一个全局,还是打算引用最近的with块的一个迄今未定义的属性,因此假设它是全局的。您可以确保totalRevenue每个月都有一个属性,或者完全避免使用with语句。不鼓励使用with MDN这样说:

  

不建议使用with语句,因为它可能是混淆错误和兼容性问题的根源。有关详细信息,请参阅下面“说明”部分中的“歧义对比”段落。