将行为与JavaScript对象参数混淆
我有以下代码:将行为与JavaScript对象参数混淆,javascript,Javascript,我有以下代码: function destroyer(arr) { for(var i=1; i<arguments.length; i++){ var kill = arguments[i]; arr = arr.filter(function(x){return x != kill;}); } return arr; } console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3)); 当我期望[1,1]时,我得到[1,
function destroyer(arr) {
for(var i=1; i<arguments.length; i++){
var kill = arguments[i];
arr = arr.filter(function(x){return x != kill;});
}
return arr;
}
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));
当我期望[1,1]时,我得到[1,2,3,1,2,3]。为什么会出现这种情况?因为当您在匿名函数中使用
参数时,您访问的是该函数的参数,而不是destroyer()
您需要复制destropher()
的参数,最好在循环之前,如下所示:
功能销毁程序(arr){
var args=参数;
对于(变量i=1;i 日志(驱逐舰([1,2,3,1,2,3],2,3))代码>因为当您在匿名函数中使用参数时,您访问的是该函数的参数,而不是destructor()
您需要复制destropher()
的参数,最好在循环之前,如下所示:
功能销毁程序(arr){
var args=参数;
对于(变量i=1;i 日志(驱逐舰([1,2,3,1,2,3],2,3))
在第二种情况下,使用内部函数的参数
对象,而不是外部函数。可以使用箭头表示法arr=arr.filter(x=>x!=arguments[i])
在第二种情况下,使用内部函数的参数
对象,而不是外部函数。可以使用箭头表示法arr=arr.filter(x=>x!=arguments[i])代码>当然,如果您要使用ES6<代码>函数销毁程序(arr,…args){返回arr.filter(x=>!args.includes(x));}
当然,如果要使用ES6<代码>函数销毁程序(arr,…args){返回arr.filter(x=>!args.includes(x));}
arr = arr.filter(function(x){return x != arguments[i];});