我有一段JavaScript代码,我在“JavaScript忍者的秘密”(John Resig书)中找到。我有一个问题来了解变量的行为。 以下是代码(相对于简化为原来的):变量范围澄清
(function() {
var results;
this.assert = function assert() {
var li = document.createElement("li");
results.appendChild(li);
return li;
};
this.test = function test(name, fn) {
results = document.getElementById("results");
results = assert().appendChild(document.createElement("ul"));
fn();
};
})();
window.onload = function() {
test("A test.", function() {
assert();
assert();
});
};
我的问题是结果变量。当您输入“test”函数时,由于appendChild函数的作用,结果变量将首先取值“ul#results”,然后值“ul”。但是当您输入“fn()”函数时,“results”的值仍然是“ul#results”。为什么?我有些难以理解这个变量的范围。
有人可以帮我理解这个话题吗?
非常感谢。
是的,但是为什么结果变量在输入fn()函数时有不同的值? – user1512966 2012-07-09 20:11:02
为什么你认为在这一点上会有另一个价值? – ThiefMaster 2012-07-09 20:12:08
哎呀!我发现了这个问题。问题是在fn()函数中,变量结果不可见。它只在“test”和“assert”函数中可见,但是我在HTML中有“结果”为“id”的ul元素,然后在萤火虫中,当我悬停结果时看到这个“id”值用鼠标变量。 – user1512966 2012-07-09 20:32:42