鍍金池/ 問答/HTML/ js的一段代碼沒懂什么意思

js的一段代碼沒懂什么意思

看《js的設計模式與開發(fā)實踐》一書,由于自己小白,有一段代碼實在是沒看懂,求大神解答!代碼的功能是想實現(xiàn)數(shù)組的連乘,然后對于相同的參數(shù)來說,每次都進行計算比較浪費,于是提出了以下代碼:

var cache = {};
var mult = function() {
    var args = Array.prototype.join.call(arguments, ',');
    if (cache[args]) {
        return cache[args];
    }
    var a = 1;
    for (var i = 0, l = arguments.length;i < l;i++) {
        a = a * arguments[i];
    }
    return cache[args] = a;
};

alert(mult(1,2,3)); //輸出6

主要不懂的地方就是cache是個對象,然后cache[args]是什么意思呢?
以及return cache[args] = a;這句也不是很懂。

回答
編輯回答
熊出沒

cache[args]在大多數(shù)情況下相當于cache.args的寫法,
但是由于args在這里是個變量名,實際指代1,2,3,如果直接使用cache.args = a的話,最后cache的值就是{args:6}(1,2,3連乘等于6);
使用cache[args]時,args會先被轉(zhuǎn)化為變量值,即1,2,3,最后cache的值才是{1,2,3:6},在下次碰到函數(shù)的輸入值是1,2,3時就可以直接從cache中取出6

2018年5月31日 14:08
編輯回答
糖豆豆

函數(shù)mult每次執(zhí)行的參數(shù)和輸出作為cache對象的key和value,cache[args]是取出緩存的數(shù)據(jù);
return cache[args] = a相當于cache[args] = a; return a;

2017年6月12日 17:36
編輯回答
澐染

就是個緩存,比如說前面已經(jīng)計算過一次 mult(1,2,3)了,cache[1,2,3]的值就為6,那么下次再計算mult(1,2,3)的時候,就不需要再去計算了,直接從cache對象中拿到答案就行了。

2018年9月2日 23:32
編輯回答
敢試
if (cache[args]) {
    return cache[args];
}

判斷cache對象里面是否已經(jīng)有緩存,如果有,直接返回,不經(jīng)過后續(xù)無用計算



 return cache[args] = a;
 
 將本次計算結(jié)果緩存起來,方便后續(xù)遇到同樣的計算請求可以直接返回結(jié)果
2017年8月31日 23:52