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
