我遇到了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,删除了推送,以更好地解释发生的情况 –