[英]Whats the name for a javascript pattern with a variable that is assigned the return value of a function?
這個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());
});
這是一個自我調用的匿名函數。
當您想要做一些工作時,它很有用,但要將變量保持在范圍之外。 如果您擔心內存泄漏,這一點尤其重要 - 匿名函數中使用的變量會立即超出范圍,並且可以被垃圾收集器清理。 當然,如果你返回一個閉包,則會發生相反的情況 - 這些變量會在閉包的生命周期內保留。
編輯:你的第二個例子是一個閉包。 你的閉包看起來很像你自己調用的匿名函數,但是,正如我上面提到的,它的行為完全不同。
我會更多關於閉合,但是我正在通過手機回答,這種答案需要十個手指......也許我稍后會再回來看看。
我相信你正在尋找備忘錄 。
在計算中,memoization是一種優化技術,主要用於通過函數調用來避免重復計算先前處理的輸入的結果來加速計算機程序。
...
記憶功能“記住”與某些特定輸入相對應的結果。 使用記憶輸入的后續調用將返回記住的結果而不是重新計算結果,從而消除了除了使用這些參數對函數進行的第一次調用之外的所有參數的調用的主要成本。
是“currying”嗎?
N個參數的函數,被認為是一個參數的函數,它返回N-1個參數的另一個函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.