创build一个更简单的嵌套函数的方法
我正在寻找降低像这样的代码的开销
foo(bar(baz("hello"))) // function hell
理想情况是这样的
var fbb = bind(foo, bar, baz) foo("hello")
这是否存在? 本机还是图书馆?
我通过下划线和绑定 。
下划线有写作function,将做你想要的:
var composite = _.compose(foo, bar, baz); composite('hello');
function foo(a1){ return 'foo' + a1; } function bar(a2){ return 'bar' + a2; } function baz(a3){ return 'baz' + a3; } alert(foo(bar(baz("hello")))); var composite = _.compose(foo, bar, baz); alert( composite('hello') );
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>
function getCaller(first) { var rest = Array.prototype.slice.call(arguments, 1); return function (value) { return rest.reduce(function (previous, next) { return next(previous); }, first(value)); }; } function foo(string) { return string + ' world!'; } function bar(string) { return string + ' Hi'; } function baz(string) { return string + ' Mom!'; } var caller = getCaller(foo, bar, baz); console.log(caller('Hello')); // Prints: Hello world! Hi Mom!
var bind = function() { var fns = Array.prototype.slice.call(arguments).reverse(); return function(value) { for (var key in fns) { var fn = fns[key]; console.log(fn); value = fn(value); } return value; } } function plusTomato(value) { return value + "tomato"; } function plusPear(value) { return value + "pear"; } var plus = bind(plusTomato, plusPear); var y = plus("pancake"); //pankaketomatopear console.log(y); var x = plusTomato(plusPear("pancake")); //pankaketomatopear console.log(x);