在学习下划线记忆时,我不了解这一行:
 “” 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];
    };
};

最佳答案

在上面的代码中,最初会创建一个带有名称输出的对象。

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

例如:考虑一个功能,

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);
       }


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

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

希望您了解其背后的逻辑。

关于javascript - 下划线从头开始记住,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31824097/

10-12 15:31