gpt4 book ai didi

javascript - 内存函数必须定义为变量吗?

转载 作者:行者123 更新时间:2023-11-30 16:43:03 26 4
gpt4 key购买 nike

我刚刚问了这个问题 ( 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();

最佳答案

由于 javascript 中的函数是一个对象,您可以只使用该函数来内存值。我认为在 fib example 中更有意义,但这是您的原始帖子。

function main() {
// memoizing function
function create_node() {
var value;
// read from memo on function object
if (create_node.memo) {
value = create_node.memo.cloneNode();
value.innerHTML = 'cloned';
console.log("clone node");
console.log(value);
} else {
var value = document.createElement("div");
value.innerHTML = "hello";
console.log("new node");
console.log("value: " + value);
// retain memo on the function object
create_node.memo = value;
}
return value;
}

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]);
document.getElementById('container').appendChild(collection[i]);
}
}

main();
<div id="container"></div>

关于javascript - 内存函数必须定义为变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31654064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com