設想張三打字場景 輸入 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
如果有更漂亮的寫法歡迎來討論,讓我們一起有條不紊的持續進步。
喜歡的話不妨點個小小的贊與關注,您的贊與關注將是我源源不斷的前進動力。