1.
function not(f) { return function () { var result=f.apply(this,arguments); return !result; }; } var even=function (x) { return x%2===0; }; var odd=not(even); console.log([1,1,2,5,5].every(odd));//返回true
2.自己实现map()
var map=Array.prototype.map ? function (a,f) { return a.map(f);//如果已经存在map()方法,就直接使用它 }:function (a,f) {//自己实现map()方法 var results=[]; for(var i=0,len=a.length;i<len;i++){ if(i in a) results[i]=f.call(null,a[i],i,a); } return results; } function mapper(f) { return function (a) { return map(a,f); }; } var increment=function (x) { return x+1; } var incrementer=mapper(increment); console.log(incrementer([1,2,3]));//[2,3,4]
3.
//返回一个新的可以计算f(g(...))的函数 //返回的函数h()将它所有的实参传入g(),然后将g()的返回值传入f() //调用f()和g()时的this值和调用h()时的this值是同一个this function compose(f,g) { return function () { //需要给f()传入一个参数,所以使用f()的call()方法 //需要给g()传入很多参数,所以使用g()的apply()方法 return f.call(this,g.apply(this,arguments)); }; } var square=function (x) { return x*x; }; var sum=function (x,y) { return x+y; } var squareofsum=compose(square,sum); console.log(squareofsum(2,3));//=>25
© 著作权归作者所有