gpt4 book ai didi

javascript - 关于 JavaScript 数组原型(prototype)

转载 作者:行者123 更新时间:2023-11-28 06:17:35 25 4
gpt4 key购买 nike

我最近阅读了与 JavaScript 相关的教程 page ,我尝试了一些代码,但我不明白一些逻辑。以下是作者代码。

函数本身:

var lz="";
lz.memo = function (fn) {
var cache = {};
return function () {
var key = [].join.call(arguments, '§') + '§';
if (key in cache) {
return cache[key]; }
return cache[key] = fn.apply(this, arguments);
};
};

及其执行

 var foo = 1;
function bar(baz) {
return baz + foo;
}
var cached = lz.memo(bar);
console.log(cached(1));
foo += 1;
console.log(cached(1)); //2

但是如果我改变

var key = [].join.call(arguments, '§') + '§';

var key=arguments[0];

它也有效(缓存有效)。作者这样做的目的是什么

var key = [].join.call(arguments, '§') + '§';

感谢关注!这是CODEPEN of code

最佳答案

it also works (Caching works)

只是因为你只用一个参数调用它。 (而且它的工作方式不太一样,缓存键将缺少原始代码所具有的键上的§。)

What is the purpose here the author used

他们正在创建一个字符串,其中包含您提供的所有参数,并通过 § 连接在一起。他们和§之间最后,像这样:

function foo() {
return [].join.call(arguments, '§') + '§';
}
console.log(foo(1)); // 1§
console.log(foo(1, 2)); // 1§2§
console.log(foo("a", "b", "c")); // a§b§c§

他们这样做是因为 arguments类似于数组,但它不是数组,因此它没有 join方法来自Array.prototype .

他们创建的临时数组实际上没有任何原因,你可以直接调用join直接:

return Array.prototype.join.call(arguments, '§') + '§';

另一个选项是转换 arguments到实际数组:

return Array.prototype.slice.call(arguments).join('§') + '§';

或者在 ES2015 中(或使用垫片):

return Array.from(arguments).join('§') + '§';

关于javascript - 关于 JavaScript 数组原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35826088/

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