将函数的参数提取到全局范围(javaScript)

将函数的参数提取到全局范围(javaScript),javascript,function,arguments,Javascript,Function,Arguments,我只是想知道是否有一种方法可以将函数x(…){…}的参数提取到全局范围,并可能将它们存储到变量中 我知道如果你构造一个函数,你可以返回“arguments”对象,但这不是我想要的,因为函数是未知的 为了解释我为什么要这样做,我尝试创建一个函数“a”,它接收一个函数“x”作为参数,我需要返回一个函数“y”,当调用该函数时,它将检查它是否已经计算了给定参数的结果,如果可能的话,返回该值 我知道这可能不是完成任务的最佳方法。您尝试执行的术语是,它不需要将参数导出到全局范围 如果使用Lodash/下划线

我只是想知道是否有一种方法可以将函数x(…){…}的参数提取到全局范围,并可能将它们存储到变量中

我知道如果你构造一个函数,你可以返回“arguments”对象,但这不是我想要的,因为函数是未知的

为了解释我为什么要这样做,我尝试创建一个函数“a”,它接收一个函数“x”作为参数,我需要返回一个函数“y”,当调用该函数时,它将检查它是否已经计算了给定参数的结果,如果可能的话,返回该值


我知道这可能不是完成任务的最佳方法。

您尝试执行的术语是,它不需要将参数导出到全局范围

如果使用Lodash/下划线,则它具有以下特性:

var calculate = function (num) {
    console.log('I have been called!');
    ...
};

calculate = _.memoize(calculate);

console.log(calculate(4));
console.log(calculate(5));
console.log(calculate(4));

我在猜测你到底想做什么,但这里有一个结构性的想法。这将创建一个缓存其结果的函数,因此对于给定的输入参数,结果只计算一次(然后从缓存中检索)。它假定函数的参数是一个字符串或具有唯一的
toString()
转换的任何其他对象

var myFunc = (function() {
     var cache = {}, has = Object.prototype.hasOwnProperty;
     return function(arg) {
         if (has.call(cache, arg)) {
             return cache[arg];
         } else {
             // do your calculation on arg to generate result
             // ...
             cache[arg] = result;
             return result;
         }
     }
})();

此实现针对具有单个参数的函数进行了优化,但如果您希望基于多个参数进行缓存,也可以通过基于所有参数的组合构造唯一键并基于该键进行缓存来扩展此实现。

也许您应该告诉我们您使用的语言。完全正确!它在javaScriptWorks中,直到计算产生
“hasOwnProperty”
:-)+1为止。@Bergi-好的,我修复了它,因此它甚至可以使用
“hasOwnProperty”
作为参数。我以前已经让它免疫了(就像这样),但有时会忘记。谢谢!它确实是u.memoize,但我正在进行实现。