描述:記錄一些可以優化流程處理代碼的js片段。
1、 環境判斷
根據不同環境執行代碼的情景,常用于瀏覽器兼容,利用閉包和函數重寫,只需在初始化時檢驗一次環境,避免反復執行檢驗環境的代碼。
PS:參考自:Coffce 2015年06月19日發布 https://segmentfault.com/a/1190000002920768
>>舉個簡單栗子
function foo() {
context=1;
console.log(context);
context=2;
foo = function() {
console.log(context);
}
}
執行foo(), 第一次輸出1,第二次輸出2
>>舉個實際應用的栗子: 兼容IE8的選擇器匹配方法
// 判斷element是否匹配選擇器selector
function matchSelector(element, selector) {
var match =
document.documentElement.webkitMatchesSelector ||
document.documentElement.mozMatchesSelector ||
document.documentElement.msMatchesSelector ||
// 兼容IE8及以下瀏覽器
function(selector, element) {
// 這是一個好方法,可惜IE8連indexOf都不支持
// return Array.prototype.indexOf.call(document.querySelectorAll(selector), this) !== -1;
if (element.tagName === selector.toUpperCase()) return true;
var elements = document.querySelectorAll(selector),
length = elements.length;
while (length--) {
if (elements[length] === this) return true;
}
return false;
};
// 重寫函數自身,使用閉包keep住match函數,不用每次都判斷兼容
matchSelector = function(element, selector) {
return match.call(element, selector);
};
return matchSelector(element, selector);
}
只有在第一次調用時需要判斷加哪個前綴執行哪個方法,其后都是調用了閉包的match函數。