高阶函数

高阶函数

第一个函数,是一个判断类型,本身是传俩个参数,现在将一个函数包着一个函数,里面的包着的函数是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();

 

posted @ 2020-03-11 22:24  泽能  阅读(167)  评论(0编辑  收藏  举报