ES6——Thunkify用法

1.

生产环境的转换器,建议使用 Thunkify 模块。
 
// "use strict"
function thunkifyy(fn) {
    return function() {
        console.log(arguments);  //Arguments(2) [8, 9, callee: ƒ, Symbol(Symbol.iterator): ƒ]
        console.log(arguments.length);  // 2
//         console.log(arguments[3]);  //        console.log(arguments[3]) ==> undefine
        var args = new Array(arguments.length);
        var ctx = this;
        for (var i = 0; i < args.length; ++i) {
            args[i] = arguments[i];
        }
        return function(done) {
            console.log(done);  // f log() { [native code] }
            var called;
            console.log(args);  //[8, 9]
            args.push(function() {
                if (called) 
                        return;
                called = true;
                done.apply(null, arguments);  //定义了一个函数 作为参数,添加到args数组,在fn.apply(ctx, args);被调用
            });
            console.log(args);  //[8, 9, f]

            try {
                console.log(fn)
                fn.apply(ctx, args);  //17
            } catch(err) {
                done(err);
            }
        }
    }
};

function f(a, b, callback){
        var sum = a + b;
                 callback(sum);  //虽然这里多次调用,也只会输出一次。8+9=17
                 callback(sum);
}

var ftt = thunkifyy(f);
var print = console.log.bind(console);
// ftt(1, 2,3,4,5,6,7,8,9,0)(print);
ftt(8,9)(print);  //17
原文地址:https://www.cnblogs.com/sunupo/p/15481677.html