惰性函数
指的是函数只在第一次执行的时候进行检查运行环境的功能特性,并动态修改函数.以后再次执行的时候,就可以避免重复性检查环境
比如,以前我们创建一个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)