js函數篇——惰性函數的個人理解

2020-10-25 09:00:33

惰性函數的思想有點類似於以下場景:

設想張三打字場景 輸入 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 

如果有更漂亮的寫法歡迎來討論,讓我們一起有條不紊的持續進步。
喜歡的話不妨點個小小的贊與關注,您的贊與關注將是我源源不斷的前進動力。