这很奇怪......在function getNumber()
中,变量mostRecent
未访问外部变量var mostRecent
。
我在控制台中看到console.log(mostRecent)显示mostRecent
已更新,但当我elements.mostRecent
时,它仍会显示默认值。
var elements = function () {
var mostRecent = { "timeStamp" : "0" };
var timeCollection = [];
function getElements() {
var trElements = document.getElementsByTagName("tr");
for (var i = 1; i < trElements.length; ++i) {
var obj = {
"action" : trElements[i].children[5].textContent,
"timeStamp" : trElements[i].children[8].textContent
}
timeCollection.push(obj);
}
}
function getNumber() {
timeCollection.forEach(function findRecent(element) {
var timeStamp = moment(element["timeStamp"], "MMM. D, YYYY, h:m A");
var mostRecentMoment = moment(mostRecent["timeStamp"], "MMM. D, YYYY, h:m A");
if (moment(timeStamp).isAfter(mostRecentMoment)) { mostRecent = element; }
});
console.log(mostRecent);
}
function refresh() {
getElements();
getNumber();
}
return {
mostRecent : mostRecent,
refresh: refresh
}
}();
elements.refresh();
答案 0 :(得分:4)
内部变量mostRecent
更改时,属性mostRecent
不会自动更新。将其作为函数来获取内部变量的最新版本:
return {
getMostRecent: function () {
return mostRecent;
},
refresh: refresh
};
答案 1 :(得分:2)
你这样做:
var foo = { bar: 1, baz: 2 };
var tar = foo;
foo = { poo: 3, par: 4 };
tar
// <- { bar: 1, baz: 2 }
有效地失去参考。
你可以这样做:
var foo = { bar: 1, baz: 2 };
var thing = {
get tar () { return foo; }
};
foo = { poo: 3, par: 4 };
thing.tar;
// <- { poo: 3, par: 4 }
但是,使用getter会使代码复杂化。您可能更愿意将参考文献保持在“高于”的水平。
var thing = {
foo: { bar: 1, baz: 2 }
};
// just return thing
thing.foo = { poo: 3, par: 4 };
// as long as you use the reference to thing, foo will always be up to date
thing.foo;
// <- { poo: 3, par: 4 }