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
    原文作者:jProvim
    原文地址: https://www.jianshu.com/p/5f223f859e77
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞