我有这样的事情:
function main() {
function create_node() {
console.log("create_node")
(function() {
var memo;
console.log(memo);
function f() {
var value;
console.log(value);
if (memo) {
value = memo.cloneNode();
console.log("clone node");
console.log(value);
} else {
var value = document.createElement("div");
var style = "";
value.setAttribute("style", style);
value.innerHTML = "hello";
console.log("new node");
console.log(value);
}
return value;
}
return f;
})();
}
var colection = [];
for (var i = 0; i < 10; i++) {
colection.push(create_node());
};
}
main();
问题是我在尝试记录“create_node”时遇到错误(至少在firefox中)。此外,如果我不返回f(),而不是f,它不会被执行。无论如何,备忘录总是未定义的。所以这里有三个问题。我猜他们来自对复杂闭包的缺乏理解,所以我需要一个Javascript摇滚明星来启发我!
答案 0 :(得分:3)
由于我无法发表评论,我必须发表回复。
我在您的代码中看到了多个问题:
create_node
函数没有返回。所以,你的收藏总是空的。f
函数中定义了两个名称为“value”的变量。第二个var值可能是一个bug。memo
。f
时,你没有执行它。我猜你正试图做那样的事情:
function main() {
var memo;
function create_node() {
console.log("create_node");
memo = (function() {
console.log("memo:" + memo);
function f() {
var value;
console.log("value:" + value);
if (memo) {
value = memo.cloneNode();
console.log("clone node" + value);
} else {
value = document.createElement("div");
var style = "";
value.setAttribute("style", style);
value.innerHTML = "hello";
console.log("new node:" + value.innerHTML);
}
return value;
}
return f;
})()();
return memo
}
var collection = [];
for (var i = 0; i < 10; i++) {
collection.push(create_node());
};
// Display results
for(var i = 0; i<10;i++) { console.log(i + ". " + collection[i]); }
}
答案 1 :(得分:1)
我找到了自己问题的答案:
git ls-files -co