首先先说下 什么是惰性函数,顾名思义懒惰的函数,常用于在解决浏览器兼容性方面,举个例子
在一个方法里面可能会涉及到一些兼容性的问题,不同的浏览器对应不同的方法,第一次我们遍历这些方法找到最合适的那个, 并将这个方法覆盖于遍历它的函数,这就是惰性函数即只遍历一次就找到最佳方案,下次再要找那个方法的时候就不用遍历了,提高了性能。
getXHR: (function () {
var item = [
function () {
return new XMLHttpRequest()
},
function () {
return new ActiveXObject('Microsoft.XMLHTTP');
},
function () {
return new ActiveXObject('MsXML2.XMLHTTP');
}, function () {
return new ActiveXObject('MsXML3.XMLHTTP');
}
]
for (var i = 0; i < item.length; i++) {
try {
return item[i]
} catch (err) {
continue
}
}
throw new Error('not support')
})(),
上述代码,只有在第一次执行的时候遍历了,找到最合适的就返回了,以后再用就去不用遍历了。
什么是柯里化函数?柯里化函数其实就是一种写法(我是这么认为的 )具体是怎么样的呢
function(){
return function(){}
}
这种写法的函数就是柯里化函数,那么这种写法有什么优势么?在解决一些问题的时候 用这中写法是非常好的 ,特别是一些函数不好传递参数的问题
在JS中的事件里,有一个参数是浏览器自带的,那就是事件e 但是有时候我们想改变绑定事件对象的this,而又不能少了e,那么柯里化函数就用上了
bind: function (fn,context) {
if (Function.prototype.bind) {
return fn.bind(context);
}
return function(){
fn.apply(context,arguments)
}
}
这样写,我就想传递几个参数都行
其实重要的不是怎么写,重要的是思想。在一些动态创建函数的方法里 柯里化函数也经常被用到,在一些大的框架里面也经常用到这种写法