在另一个函数中 momoizing 函数时出现多个错误
multiple errors while momoizing function inside another function
我有这样的东西:
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 中)。另外,如果我不使用 return f() 而不是 f,它就不会被执行。无论如何,备忘录总是未定义的。所以我这里有这三个问题。我猜他们是因为对复杂的闭包缺乏了解,所以我需要 Javascript 摇滚明星来启发我!
由于我不能评论,所以我必须post回复。
我在您的代码中发现了多个问题:
create_node
函数没有 return。因此,您的 collection 将始终为空。
- 您在
f
函数中定义了两个名为 "value" 的变量。第二个 var 值可能是一个错误。
- 从未分配变量
memo
。
- 当您在匿名函数中 returning
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]); }
}
我找到了我自己问题的答案:
var create_node = (function() {
var memo;
console.log("memo: "+memo);
console.log("create_node")
function f () {
var value;
if(memo){
value = memo.cloneNode();
console.log("clone node");
console.log(value);
}else{
var value = document.createElement("div");
memo = value;
}
console.log("new node");
console.log("value: "+value);
return value;
}
return f;
})();
我有这样的东西:
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 中)。另外,如果我不使用 return f() 而不是 f,它就不会被执行。无论如何,备忘录总是未定义的。所以我这里有这三个问题。我猜他们是因为对复杂的闭包缺乏了解,所以我需要 Javascript 摇滚明星来启发我!
由于我不能评论,所以我必须post回复。
我在您的代码中发现了多个问题:
create_node
函数没有 return。因此,您的 collection 将始终为空。- 您在
f
函数中定义了两个名为 "value" 的变量。第二个 var 值可能是一个错误。 - 从未分配变量
memo
。 - 当您在匿名函数中 returning
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]); }
}
我找到了我自己问题的答案:
var create_node = (function() {
var memo;
console.log("memo: "+memo);
console.log("create_node")
function f () {
var value;
if(memo){
value = memo.cloneNode();
console.log("clone node");
console.log(value);
}else{
var value = document.createElement("div");
memo = value;
}
console.log("new node");
console.log("value: "+value);
return value;
}
return f;
})();