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);
  • 相关阅读:
    JavaScript.how-to-debug-javascript
    iOS.mach_absolute_time
    Startup.国外新锐公司及其技术Blog
    Android.FamousBlogs
    iOS.PrototypeTools
    Android.API.Context.getFilesDir()
    Android.Tools.Ant
    Tools.OnlineAPIs
    Java.Class
    Android.StructureOfAndroidSourceCodeRootTree
  • 原文地址:https://www.cnblogs.com/3body/p/6019796.html
Copyright © 2011-2022 走看看