下划线从头开始记忆

问题描述 投票:0回答:1

在学习下划线

memoize
时,我不明白这一行:
var argString = Array.prototype.join.call(arguments,"_");
。我知道它正在创建一个参数字符串,但它在这里如何适用?

_.memoize = function(func) {
    var output  = {}; 
    return function(){
        var argString = Array.prototype.join.call(arguments,"_");       
        if (output[argString] === undefined){ 
            output[argString] = func.apply(this, arguments); 
        }
        return output[argString];
    };
};
javascript underscore.js
1个回答
3
投票

在上面的代码中,最初创建了一个名为 output 的对象。

接下来,根据参数创建对象的键。

示例:考虑一个函数,

function x(a,b,c){
   // argument will be in an array form, but not an Array actually
   console.log(argument) // will give array like structure.
}

现在,使用 Array.prototype.join.call(arguments,"_"); 根据参数生成动态键。

接下来,

if (output[argString] === undefined){ 
        output[argString] = func.apply(this, arguments); 
       }

这将检查动态生成的密钥是否存在于 output 对象中,

如果存在,它将返回值而不调用函数,否则它将调用函数并将键和值缓存在输出对象中。

希望您理解这背后的逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.