JavaScript惰性函数手写实现
惰性函数就是当函数需要频繁执行判断逻辑(如判定浏览器版本从而实现不同操作)的情景下,将结果以函数的形式保存在原函数名下,从而实现函数的重写,避免多次执行冗余判断逻辑。
实现版本1:以函数声明的形式定义,调用两次
var testProperty = 'Chrome'
function lazyFunction(){
console.log('第一次加载')
if(testProperty==='Chrome'){
return lazyFunction = function(arg1='Chrome',arg2='Browser'){
console.log('第二次加载',arg1,arg2);
}
}else{
return lazyFunction = function(arg1='Else',arg2='Browser'){
console.log('第二次加载',arg1,arg2);
}
}
}
lazyFunction(); //第一次加载
lazyFunction(); //第二次加载 Chrome Browser
//或者lazyFunction()();
实现版本2:以函数表达式+立即执行形式定义,调用一次
var testProperty = 'Chrome'
var anotherLazyFunction = (function(){
console.log('ano第一次加载');
if(testProperty==='Chrome'){
return lazyFunction = function(arg1='Chrome',arg2='Browser'){
console.log('ano第二次加载',arg1,arg2);
}
}else{
return lazyFunction = function(arg1='Else',arg2='Browser'){
console.log('ano第二次加载',arg1,arg2);
}
}
})();
anotherLazyFunction();
//ano第一次加载
//ano第二次加载 Chrome Browser