什麼是Lazy Evaluation (惰性求值)?
簡(jiǎn)單點(diǎn)說(shuō)就是, 按需索取, 能不多做事, 絕對(duì)不做.
好處, 提高Performance: Code Execution, Memory Usage
例子
比如我們生成100個(gè)值
var oneHunderItems = function(end){
var results = [];
for(var i=0; i< end; ++i){
results.push(i);
}
return results;
}
雖然生成了100個(gè), 但是我們實(shí)際就需要前10個(gè). 怎麼辦? 造成了Memory Usage的浪費(fèi).
所以, Lazy Evaluation 就來(lái)了幫忙了.
我們實(shí)際想要的是如下結(jié)果:
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)
}
}
更誇張點(diǎn), 來(lái)個(gè) Infinity. 懂了原理的我們也是不怕的 :)
當(dāng)然了, 這個(gè)寫(xiě)法很... Not reusable. 所以推薦大家看看Lazy.js
Reference: