zoukankan      html  css  js  c++  java
  • JavaScript 中的 Thunk 函数

    参数的求值策略:

    var x = 1;
    
    function f(m){
      return m * 2;
    }
    
    f(x + 5);  // x +5 在何时运算?

    1、传值调用:

    var x = 1;
    
    function f(m){
      return m * 2;
    }
    
    f(6);  // 将值先计算出来再作为参数传入函数。C 语言采用这种策略

    2、传名调用

    var x = 1;
    
    function f(m){
      return m * 2;  // (x + 5) * 2。参数不求值,传到函数中,在函数中进行运算求值。JS 采用此策略
    }
    
    f(x + 5);

    Thunk 函数的作用是将多参数替换成单参数版本

    var Thunk = function (fileName){
      return function (callback){
        return fs.readFile(fileName, callback);
      };
    };
    
    // 正常版本的readFile(多参数版本)
    fs.readFile(fileName, callback);
    
    // Thunk版本的readFile(单参数版本)
    var readFileThunk = Thunk(fileName);
    readFileThunk(callback);

    任何函数,只要参数有回调函数,就能写成Thunk函数的形式。下面是一个简单的Thunk函数转换器。

    var Thunk = function(fn) {
      return function (...args) {
        return function (callback) {
          return fn.call(this, ...args, callback);
        }
      };
    };

    使用上面的转换器,生成fs.readFile的Thunk函数。

    var readFileThunk = Thunk(fs.readFile);
    readFileThunk(fileA)(callback);
  • 相关阅读:
    Oracle rownum用法、分页
    Oracle 序列(查询序列的值,修改序列的值)
    Photoshop 更换证件照底色
    Oracle 新建用户、赋予权限
    Oracle-SQL 建表
    SQL decode 函数的用法
    英语词汇800常用20类
    c语言常用排序
    js时间戳总结
    Javascript之编译器
  • 原文地址:https://www.cnblogs.com/3body/p/6019796.html
Copyright © 2011-2022 走看看