我遇到了java-script關閉和數組的有趣情況。 我不確定javascript的哪個部分導致了參數數組的緩存。爲什麼JavaScript封閉數組保留舊值
var SLICE = Array.prototype.slice;
var attach = function(method) {
var args = SLICE.call(arguments, 1);
return function() {
args = args.concat(SLICE.call(arguments, 0));
method.apply(null, args);
};
};
function foo(param1, param2, param3) {
console.log(param1, param2, param3);
};
var bar = attach(foo, 1, 2);
bar(3);
bar(4);
上述代碼的輸出是
代替
1 2 3
1 2 4
獲得正確的輸出,如果代碼改變爲
var SLICE = Array.prototype.slice;
var attach = function(method) {
var args = SLICE.call(arguments, 1);
return function() {
method.apply(null, args.concat(SLICE.call(arguments, 0)));
};
};
function foo(param1, param2, param3) {
console.log(param1, param2, param3);
};
var bar = attach(foo, 1, 2);
bar(3);
bar(4);
輸出是
1 2 3
1 2 4
我想明白了,其中的Java腳本的性能會發生這種情況背後的原因是什麼?
編輯: 代碼被修改,以去除推,並解釋越好之情況
因爲'push'變異的'args'。 – Bergi
@Bergi,刪除了推送,以更好地解釋發生的情況 –