javascript中使用函數的閉包作運算緩存

定義一個cached函數做爲存儲變量的中間體:緩存

function cached(fn){
    var cache = Object.create(null);    
    return function(str){
        var hit = cache[str];
        return hit || (cache[str] = fn(str))
    }
}

在cached函數中,定義了一個cache的內部變量,該變量只能在其內部,或者其子函數內部被訪問。閉包

var hyphenateRE = /\B([A-Z])/g;
var hyphenate = cached(function (str) {
      return str.replace(hyphenateRE, '-$1').toLowerCase()
});

而後定義一個駝峯轉鏈接符的方法:函數

在咱們調用 hyphenate 方法的時候,會首先在其cache對象中查找是否有緩存的值,若是有直接返回,若是沒有則執行處理函數並保存到緩存中;spa

hyphenate 函數能夠理解爲:
var hyphenate = function(str){
    // cache會做爲該函數的一個閉包對象存在其內部做用域中(繼承其父函數cached的做用域)
    var hit = cache[str];
    if(hit){
        return hit
    }else{
        return (cache[str] = str.replace(hyphenateRE, '-$1').toLowerCase())
    }
}
相關文章
相關標籤/搜索