簡體   English   中英

關於 JavaScript 數組原型

[英]Regarding with JavaScript array prototype

我最近從這個頁面閱讀了與 JavaScript 相關的教程,我嘗試了一些代碼,但我不明白一些邏輯。 下面是作者代碼。

函數本身:

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

它也有效(緩存有效)

只是因為你只用一個參數調用它。 (而且它的工作方式並不完全相同,緩存鍵將缺少原始代碼所具有的鍵上的§ 。)

作者在這里使用的目的是什么

他們創造了所有的您提供加入連同參數字符串§它們之間§末,就像這樣:

 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類似數組的,但它不是數組,因此它沒有來自Array.prototypejoin方法。

他們創建的臨時數組實際上沒有任何理由,您可以直接調用join

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

另一個選項是將arguments轉換為實際數組:

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM