惰性函数的思想有点类似于以下场景:
设想张三打字场景 输入 abc
一般函数:
function 打字(内容){
console.log("看文稿")
console.log("输入",内容)
}
打字("a") //看文稿 输入a
打字("b") //看文稿 输入b
打字("c") //看文稿 输入c
惰性函数:
function 打字(内容){
console.log("看文稿")
打字 = function(内容){
console.log("輸入",内容)
}
return 打字(内容)
}
打字("a") //看文稿 输入a
打字("b") // 输入b
打字("c") // 输入c
以上可以便是简易的普通函数与惰性函数的区别:
函数每次执行会走全部方法体,但是有的时候某段逻辑并不需要每次都执行。这里就需要惰性函数的加入了。
在函数第一次执行时,会走一次全部方法体,在走完公共部分后在方法体里对方法进行重新赋值,将局部函数重新赋值函数体本身,并 return 函数体。随后第二次往后的方法调用将不走公共部分(毕竟方法体都给改了,这要是还走这不诈尸了么)
一般函数 | 惰性函数 |
---|---|
张三看文稿 | 张三看文稿 |
张三输入a | 张三输入a |
张三看文稿 | 张三输入b |
张三输入b | 张三输入c |
张三看文稿 | |
张三输入c |
一般函数看一个字打一个字
而惰性函数看一次文稿后就不用看,直接打字
惰性函数还可以进一步改写:
let 打字 = (function (){
console.log("看文稿")
return function (内容){
console.log("輸入",内容)
}
})()
打字("a") //看文稿 输入a
打字("b") // 输入b
打字("c") // 输入c
如果有更漂亮的写法欢迎来讨论,让我们一起有条不紊的持续进步。
喜欢的话不妨点个小小的赞与关注,您的赞与关注将是我源源不断的前进动力。