惰性函式
阿新 • • 發佈:2020-11-24
函式高階3
函式重寫
一個函式執行之後, 被另一個函式覆蓋了。 其實就是你之前函式指標, 指向了另一個新函式.
function fun_a(){
console.log('fun_a');
fun_a = function(){
console.log("fun_b");
}
}
fun_a(); // fun_a, 並且讓fun_a指向新函式
fun_a(); // fun_b
看例子
function addEvent(type, element, fun) { if (element.addEventListener) { element.addEventListener(type, fun, false); } else if(element.attachEvent){ element.attachEvent('on' + type, fun); } else{ element['on' + type] = fun; } }
每次給瀏覽新增事件的時候,都會做判斷。 其實,我們在第一次用addEvent函式的時候,就已經可以確定瀏覽器了,之後所有呼叫addEvent都會做同樣的判斷,走同樣的分支。在上面我們已經知道了 函式重寫了, 那麼我們在一次做出判斷之後,重寫 addEvent 函式,這樣以後呼叫的時候就不需要判斷了。
改寫成如下形式: 利用到了立即執行函式,在函式載入的時候就做出了判斷,返回確定函式
var addEvent = (function () { if (document.addEventListener) { return function (type, element, fun) { element.addEventListener(type, fun, false); } } else if (document.attachEvent) { return function (type, element, fun) { element.attachEvent('on' + type, fun); } } else { return function (type, element, fun) { element['on' + type] = fun; } } })();
惰性函式
惰性函式的本質是函式重寫。
惰性函式, 是指在執行之後才能確定函式本身,不是確定在定義時。
適用場景
- 應用頻繁,如果只用一次,是體現不出它的優點出來的,用的次數越多,越能體現這種模式的優勢所在;
- 分支判斷,呼叫的所有結果都會走同樣的分支。
適用瀏覽器的相容性。