一个javascript模式的名称是什么?它有一个被分配了函数返回值的变量?

一个javascript模式的名称是什么?它有一个被分配了函数返回值的变量?,javascript,functional-programming,Javascript,Functional Programming,将变量分配给返回函数值的Javascript模式的正确名称是什么 // array with a ton of random values. var once = (function(){ var i = 10000, arr = []; while(i){ arr.push( Math.random() * i ); i--; } arr = arr.toString();

将变量分配给返回函数值的Javascript模式的正确名称是什么

// array with a ton of random values. 
var once = (function(){

        var i = 10000, arr = [];

        while(i){
            arr.push( Math.random() * i );
            i--;
        }
        arr = arr.toString(); 

        return (function(){
            return arr;
        }());

}());
编辑-更好的示例:

 var once = (function(){

    // Only run a really expensive operation once...
    var i = 10000, arr = [], x;

    while(i){
        arr.push( Math.random() * i );
        i--;
    }
    arr = arr.toString(); 
    x = parseFloat(arr.toString());

    // then return the result of another function
    return function(){
        return x * (Math.random() * 10);
    };

}());

$(window).resize(function(){
    console.info(once());
});
是“咖喱”吗

N个参数的函数,被认为是一个参数的函数,返回另一个N-1个参数的函数。

是“currying”吗


N个参数的函数,被认为是一个参数的函数,返回另一个N-1个参数的函数。

这是一个自调用匿名函数

当您想做一些工作,但将变量保留在范围之外时,它很有用。如果担心内存泄漏,这一点尤其重要——匿名函数中使用的变量会立即超出范围,并且可以由垃圾收集器清除。当然,如果您返回一个闭包,则会发生相反的情况——这些变量在闭包的生命周期内保持不变

编辑:第二个例子是闭包。您的闭包看起来很像您的自调用匿名函数,但是,正如我前面提到的,它的行为非常不同


关于闭包,我想多说一点,但我是用手机接的,那种回答需要十个手指。。。也许我以后会回到这里。

这是一个自调用匿名函数

当您想做一些工作,但将变量保留在范围之外时,它很有用。如果担心内存泄漏,这一点尤其重要——匿名函数中使用的变量会立即超出范围,并且可以由垃圾收集器清除。当然,如果您返回一个闭包,则会发生相反的情况——这些变量在闭包的生命周期内保持不变

编辑:第二个例子是闭包。您的闭包看起来很像您的自调用匿名函数,但是,正如我前面提到的,它的行为非常不同


关于闭包,我想多说一点,但我是用手机接的,那种回答需要十个手指。。。也许我以后再谈这个问题。

我相信你在找我

在计算中,记忆是一种优化技术,主要用于通过函数调用来加速计算机程序,避免对先前处理的输入重复计算结果

记忆功能“记忆”与某一组特定输入对应的结果。具有记住的输入的后续调用将返回记住的结果,而不是重新计算它,从而消除了除第一次使用这些参数调用函数外的所有使用给定参数调用的主要成本


我相信你在找我

在计算中,记忆是一种优化技术,主要用于通过函数调用来加速计算机程序,避免对先前处理的输入重复计算结果

记忆功能“记忆”与某一组特定输入对应的结果。具有记住的输入的后续调用将返回记住的结果,而不是重新计算它,从而消除了除第一次使用这些参数调用函数外的所有使用给定参数调用的主要成本


只是“赋值”?匿名函数的返回值,即。否则,它只是一个普通的旧函数调用返回。也许“自动执行函数”就是您要寻找的?同样在这个例子中,似乎没有任何理由在一个新的函数范围内返回arr,但它可能只是一个人为的例子,我认为它没有名字。在任何具有一流功能的语言中,这都是一个相当标准的习语。你是想让名字知道在对话中该怎么称呼它,还是想了解更多有关它的信息?编辑后,我想你的意思可能是记忆?只是“赋值”?即匿名函数的返回值。否则,它只是一个普通的旧函数调用返回。也许“自动执行函数”就是您要寻找的?同样在这个例子中,似乎没有任何理由在一个新的函数范围内返回arr,但它可能只是一个人为的例子,我认为它没有名字。在任何具有一流功能的语言中,这都是一个相当标准的习语。你是想让这个名字知道在对话中该怎么称呼它,还是想了解更多有关它的信息?编辑后,我想你的意思可能是“记忆化”。“Curry”指的是创建一个函数来捕获一个参数的实践。因为JavaScript不是一种懒惰的计算语言,所以不可能在JavaScript中进行真正的Curry运算。@因此,要正式算作Curry运算,原始函数必须能够接受一个表达式,然后Curry函数必须能够在调用时对该表达式进行内部计算?我从来不知道。我一直认为,只要能在一个原始的网站上绑定就构成了一种咖喱。看起来我有一些维基百科要读:)。问题是,像Haskell这样的惰性评估语言可以让你真正看到这个过程。在“急切”的语言中,这有点假。“Currying”指的是创建一个捕获参数的函数的实践。因为JavaScript不是一种懒惰的计算语言,所以不可能在JavaScript中进行真正的Curry运算。@因此,要正式算作Curry运算,原始函数必须能够接受一个表达式,然后Curry函数必须能够在调用时对该表达式进行内部计算?我从来不知道。我一直认为,只要能在一个原始的网站上绑定就构成了一种咖喱。看起来我有一些维基百科要读:)。问题是,像Haskell这样的惰性评估语言可以让你真正看到这个过程。在“渴望”的语言中,这有点假。不完全是“自我”调用,但这就是人们所说的。有些人更喜欢te