高阶函数
高阶函数
第一个函数,是一个判断类型,本身是传俩个参数,现在将一个函数包着一个函数,里面的包着的函数是isString。这也是闭包,一个函数被保存在了外部或者说一个函数不在自己的作用域里执行。
function isType(type) { return function(content) { return Object.prototype.toString.call(content) === `[object ${type}]`; } } let isString = isType('String'); console.log(isString('hello'));
第二个函数,我想在打印 ‘say’ 前打印 'shuaya' 首先用全局的函数原型做一个公共方法,callback是s函数 , 会打印shuaya。 公共方法执行返回一个箭头函数。这里先执行callback()也就是s函数,在执行this()。由于是箭头函数,所以这里的this是父极的this,也就是say函数。完成。
function say() { console.log('say') } Function.prototype.before = function(callback) { return (...args) => { callback(); this(...args) } } let newSay = say.before(function s() { console.log('shuaya') }) newSay();
第三个方法,实现异步。这里执行fs1,fs2.分别会执行out函数。而out函数是after函数返回的函数,每执行一次,次数减少1,减到零时,即触发回调。
而这里的回调减少传进来的funcition(){console.log(renderObj)};
let renderObj = {}; function after(timer, callback) { return function() { if (--timer == 0) { callback(); } } } let out = after(2, function() { console.log(renderObj); }) function fs1() { renderObj['age'] = '22'; out(); } function fs2() { renderObj['name'] = '王少'; out(); } fs1(); fs2();