什麼是Lazy Evaluation (惰性求值)?
簡單點說就是, 按需索取, 能不多做事, 絕對不做.
好處, 提高Performance: Code Execution, Memory Usage
例子
比如我們生成100個值
var oneHunderItems = function(end){
var results = [];
for(var i=0; i< end; ++i){
results.push(i);
}
return results;
}
雖然生成了100個, 但是我們實際就需要前10個. 怎麼辦? 造成了Memory Usage的浪費.
所以, Lazy Evaluation 就來了幫忙了.
我們實際想要的是如下結果:
oneHunderItems.take(10).each(doWork);
var threshold = 10;
for (var i = 0; i < 100; i++) {
if (i >= threshold) {
break;
}
else {
var item = items[i];
// do work on item
doWork(item)
}
}
更誇張點, 來個 Infinity. 懂了原理的我們也是不怕的 :)
當然了, 這個寫法很… Not reusable. 所以推薦大家看看Lazy.js
Reference: