javascript - 下划线从头开始内存

标签 javascript underscore.js

在研究下划线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];
    };
};

最佳答案

在上面的代码中,最初创建了一个名为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,"_");根据参数生成动态 key 。

下一步,

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

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

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

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

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

相关文章:

javascript - 多个字段上的sortedIndexBy

javascript - Backbone 集合 sortBy

javascript - React Native 中的 FlatList 不会从 firebase 渲染子项

javascript - 使用正则表达式匹配特定序列或其他所有内容

javascript - 是否可以从父窗口关闭子窗口?

javascript - 将对象数组转换为数组对象

javascript - 用下划线或其他东西组合 2 个 MongoDB 集合对象?

javascript - 对有关脚本标签类型属性的特殊 JavaScript 问题感到好奇

javascript - 如何重定向来自特定国家/地区的用户?

javascript - 尝试将对象添加到主干集合时,此模型未定义