1. 需求:我們現在需要寫一個 foo 函式,這個函式回傳首次呼叫時的 Date 物件,注意是首次,
使用場景:當我們每次都需要進行條件判斷,其實只需要判斷一次,接下來的使用方式都不會發生改變的時候,想想是否可以考慮使用惰性函式,
惰性函式:顧名思義,有點懶惰,懶到事件只處理一次,當然不是值整個函式只處理一次,而是里面的某一行或者多行只執行一次,正常情況下,一個函式內部,所有的該執行的東西,無論是定義變數,還是新建物件,亦或者做判斷,還是運算,定義定時器等等,都是依照順序來執行,無論這個函式執行呼叫多少次,都依舊是如此;
簡單理解下,惰性函式的本質就是函式重寫,所謂惰性載入,指函式執行的分支只會發生一次,
為了不影響全域變數,我們用閉包簡單來做:
function foo() {
if (foo.t) return foo.t;
foo.t = new Date();
return foo.t;
}
但是每次執行都需要進行一次判斷,為了解決每次都需要判斷的情況,使用惰性函式,
var foo = function() { var t = new Date(); foo = function() { return t; } console.log(foo, 'foo'); console.log(foo(), 'foo()'); return foo() } console.log(foo()); setTimeout( () => { console.log(foo()); }, 3000)
最后發現兩次列印一摸一樣,因為第一次執行立即執行函式的時候,沒有跳過var t = new Date();這一步,并且把一個新的函式回傳給了foo,第二次執行的時候,foo函式只會執行:立即執行函式中的那個新的函式,也就跳過了var t = new Date();直接使用第一次呼叫的t的值,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/545151.html
標籤:其他
上一篇:Vue的基礎知識(三)
