【发布时间】:2014-09-10 06:08:49
【问题描述】:
2014 年 7 月 15 日对MDN guide on working with objects 的修订指出:
如果在顶级脚本中使用对象初始值设定项创建对象,JavaScript 会在每次计算包含对象字面量的表达式时解释该对象。
但是,在下面的 sn-p 中,当评估 objLit2.val2 时,它不使用最后设置的值,应该是 10 和 100;它改为使用1000,这是在定义objLit2 时声明的值。为什么会这样?
var i = 1000;
function iPlus3() {
alert("iPlus3");
return i + 3;
}
var objLit2 = {
val: iPlus3,
val2: i = i + 1
};
function setValue() {
i = 10;
console.log("objLit2Val1", objLit2.val(), objLit2.val2); // Outputs 13 1001 and not 13 11
i = 100;
console.log("objLit2Val2", objLit2.val(), objLit2.val2); // Outputs 103 1001 and not 103 101
// If `val` is interpreted at the time of the call, why is `val2` not also interpreted on each call?
}
setValue();
【问题讨论】:
标签: javascript function javascript-objects