【发布时间】:2015-07-27 13:13:09
【问题描述】:
我刚刚问了这个问题 (multiple errors while momoizing function inside another function),我得到了一个很好的答案……但是!为了进一步了解 JavaScript,我想知道 momoized 函数是否可以用这种样式编写:
function main () {
function memoized_f(){
//memoizing code
}
}
编辑:请注意,我不是在问上面的代码有什么区别,而是在问是否可以记住第二个代码!
那么,如何重写呢?
function main() {
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");
value.innerHTML = "hello";
console.log("new node");
console.log("value: " + value);
memo = value;
}
return value;
}
return f;
})();
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]);
}
}
main();
【问题讨论】:
-
任何一个都可以,尽管它们并不完全相同。
-
??这意味着什么?这两个样本实际上没有任何有意义的差异。在这两种情况下,都会有一个名为
memoized_f的本地函数。 -
所以你真的要问
function x(){}和var x = (function (){})()之间的区别? -
您似乎认为第一个例子可以记住,而第二个例子可能无法记住。我(和其他人)不明白为什么你会认为第二个例子不能被记住。如果您展示了如何记住第一个示例,并用它来解释您对第二个案例的担忧,也许会有所帮助。
-
@Vandervals 您的完整代码并未反映您的简单示例。您的第一个简单示例采用
var memoized_f = function(){ }形式,但您的实际代码采用var memoized_f = (function(){ })()形式(其中立即调用的函数返回一个函数)。您可能希望澄清您的示例以更好地反映您的实际问题。