js 高级函数特性

惰性函数

指的是函数只在第一次执行的时候进行检查运行环境的功能特性,并动态修改函数.以后再次执行的时候,就可以避免重复性检查环境

比如,以前我们创建一个XHRHttpRequest请求的时候会这么写

function createXHR(){
    var xhr = null
    try{
        xhr = new XMLHttpRequest()
    }catch(e){
        try{
            xhr = new ActiveXObject('Msxml2.XMLHTTP')
        }catch(e){
            try{
                xhr = new ActiveXObject('Microsoft.XMLHTTP')
            }catch(e){
                xhr = null
            }
        }
    }
    return xhr
}

那样,我们在多次调用createXHR的时候,会多次检查浏览器特性,造成不必要的性能损失.所以,在这里我们就可以使用懒加载

function createXHR(){
    var xhr = null
    if(typeof XMLHttpRequest !== undefined){
        xhr = new XMLHttpRequest()
        createXHR = function(){
            return new XMLHttpRequest()
        }
    }else{
        try{
            xhr = new ActiveXObject('Msxml2.XMLHTTP')
            createXHR = function(){
                return new ActiveXObject('Msxml2.XMLHTTP')
            }
        }catch(e){
            try{
                xhr = new ActiveXObject('Microsoft.XMLHTTP')
                createXHR = function(){
                    return new ActiveXObject('Microsoft.XMLHTTP')
                }
            }catch(e){
                xhr = null
            }
        }
    }
    return xhr
}

函数柯里化

把接收多个参数的函数,变化成接收一个单一参数的函数.也就是合并参数

1.

function curry(fn){
    var args = [].slice.call(arguments,1)
    return function(){
        var newArray = args.concat([].slice.call(arguments))
        return fn.apply(null,newArray)
    }
}

var sum = curry(function(){
    var args = [].slice.call(arguments,1)
    console.log(eval(args.join("+")))
},0)

sum()            //undefined
sum(4)           //4
sum(4,5,6,7,8)   //30

2.

var add = function(x){
    return function(y){
        return x+y
    }
}

add(4)(5)   //9

3.

function plus(sum){
    var add = function(){
        var args = []

        var _add = function(){
            [].push.apply(args,[].slice.call(arguments))
            return _add
        }

        _add.run = function(){
            return args.reduce(function(a,b){
                return a+b
            })
        }

        return _add
    }
    return add()(sum)
}

plus(0).run()             //0
plus(0)(5)(4).run()       //9

级联函数

关联函数,也叫链式调用


class Person{

    constructor(){
        this.age = 0
        this.hight = 0
    }

    setAge(){
        this.age = 18
        return this
    }

    setHeight(){
        this.hight = 183
        return this
    }
}

var sbzp = new Person()
console.log(sbzp)
sbzp.setHeight().setAge()
console.log(sbzp)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值