JavaScript Lazy Evaluation 惰性求值

什麼是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:

  1. Optimizing your JavaScript with Functional Programming
  2. Simple JavaScript implementation of cons list with lazy evaluation of map, filter etc.
    Raw
  3. Into the Land of Functional Programming with JavaScript
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容