惰性载入函数和一次性函数
惰性载入函数和一次性函数基本类似;如惰性载入函数:
在某个场景下我们的函数中有判断语句,这个判断依据在整个项目运行期间一般不会变化,所以判断分支在整个项目运行期间只会运行某个特定分支,那么就可以考虑惰性载入函数
function foo(){
if(a !== b){
console.log('aaa')
}else{
console.log('bbb')
}
}
// 优化后
function foo(){
if(a != b){
foo = function(){
console.log('aaa')
}
}else{
foo = function(){
console.log('bbb')
}
}
return foo();
}
那么第一次运行之后就会覆写这个方法,下一次再运行的时候就不会执行判断了。当然现在只有一个判断,如果判断很多,分支比较复杂,那么节约的资源还是可观的。
一次性函数道理一样:
可以在函数体里覆写当前函数,那么可以创建一个一次性的函数,重新赋值之前的代码相当于只运行了一次,适用于运行一些只需要执行一次的初始化代码
var sca = function() {
console.log('msg')
sca = function() {
console.log('foo')
}
}
sca() // msg
sca() // foo
sca() // foo
虽然平时用到的少,但是有时候特殊场景确实需要用到,不了解一次性函数时解决就很头疼,或者加一个字段判断,初始值a=false,执行一次就赋值a=true
var a = false
var b = 0 // 改变b的值一次
func () {
if (!a) {
console.log();// 执行一次的
b ++
a = true
}
}
func()函数放到一个循环体里,b的值只改变1次,即为b=1