美文网首页
js中的thunk函数

js中的thunk函数

作者: 壹豪 | 来源:发表于2019-08-22 18:57 被阅读0次

thunk是一个很早就出现了的函数,主要的作用是实现传名调用,先简单介绍一下thunk的作用
例如:

var x=1;

function f(n){
    return n*2;
}

f(x+1);

传值调用等同于f(2);
传名调用等同于(1+1)*2
看起来似乎没有什么区别
但是如果函数改成这个样子

var x=1;

function f(n){
    return 1;
}

f(x+1);

这时候传值调用会先计算x+1=2然后把结果传进去,这样就经过了计算x+1但是最后并没有使用到这个参数
传名调用就直接传入x+1然后返回1,并没有进行x+1的计算,省下了计算的时间
thunk就是为了实现传名调用
由于本文是讲js中的thunk函数,所以就科普到这里,接下来进入正题

js中的thunk函数

参考自阮一峰的解释

JavaScript语言是传值调用,但是它的thunk函数含义有所不同,在js中,thunk函数替换的不是表达式,而是把多参数函数转换成单参数的版本,且只接受回调函数作为参数

// 正常版本的readFile(多参数版本)
fs.readFile(fileName, callback);

// Thunk版本的readFile(单参数版本)
var readFileThunk = Thunk(fileName);
readFileThunk(callback);

var Thunk = function (fileName){
    return function (callback){
        return fs.readFile(fileName, callback); 
    };
};

上面代码中,fs 模块的 readFile 方法是一个多参数函数,两个参数分别为文件名和回调函数。经过转换器处理,它变成了一个单参数函数,只接受回调函数作为参数。这个单参数版本,就叫做 Thunk 函数。

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

var Thunk = function(fn){
    return function (){
        var args = Array.prototype.slice.call(arguments);
        return function (callback){
            args.push(callback);
            return fn.apply(this, args);
        }
    };
};

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

var readFileThunk = Thunk(fs.readFile);
readFileThunk(fileA)(callback);

相关文章

  • 详解generator(三)——处理thunk

    thunk js中的thunk是指一个用于调用另外一个函数的函数,没有任何参数。也可以说,使用一个函数定义封装函数...

  • js中的thunk函数

    thunk是一个很早就出现了的函数,主要的作用是实现传名调用,先简单介绍一下thunk的作用例如: 传值调用等同于...

  • 异步编程(2) Thunk函数

    Thunk函数 Thunk函数就是用来解决JavaScript中的传名调用的一种实现方式Thunk函数根据个人的理...

  • ES6 - generator 函数与异步

    Thunk 函数: 生成 fs.readFile 的 Thunk 函数: 基于 Thunk 函数的 Generat...

  • 写一个自己的Thunkify模块

    什么是Thunk函数 本段内容无耻抄袭自阮一峰的《ESMAScript 6 入门》中对Thunk函数的介绍 Thu...

  • Thunk函数

    thunk函数实现generator函数的自动执行

  • React学习笔记6-慕课案例学习

    react ajax 请求事件触发action用了thunk可以写函数,函数内再触发actionreducer中处...

  • 阅迹(一)

    3.22 看过 Thunk 函数的含义和用法 Pointfree 编程风格指南 redux-thunk redux...

  • Nodejs yield和thunk函数

    调查内存泄漏顺便复习一下yield、thunk和co这几个东东 thunk函数把多参数函数转换成标准单参数函数(回...

  • Generator 函数的异步应用

    传统方法 基本概念 Generator 函数 Thunk 函数 co 模块

网友评论

      本文标题:js中的thunk函数

      本文链接:https://www.haomeiwen.com/subject/yuyosctx.html