Javascript 为什么我的控制台结果在不同的范围内是不同的 var permute=函数(nums){ 让列表=[]; 生成=函数(标志、结果){ 如果(标志===nums.length){ list.push(结果);//向列表中添加内容 返回; } //同位遍历 对于(让i=0;i
注释出Javascript 为什么我的控制台结果在不同的范围内是不同的 var permute=函数(nums){ 让列表=[]; 生成=函数(标志、结果){ 如果(标志===nums.length){ list.push(结果);//向列表中添加内容 返回; } //同位遍历 对于(让i=0;i,javascript,arrays,Javascript,Arrays,注释出result.pop将起作用。这是因为Javascript通过引用而不是值来传递对象/数组。您可能希望通读以下内容以完全理解它列表不是空的…其中有24个空数组您是指result.pop()影响控制台结果?是的,你是对的,但为什么?你还有其他问题-如果你在代码中分散一些控制台日志,你会发现你根本不会得到排列…你最终(在全部销毁之前)使用相同的24次置换,当您将数组作为参数传入时,它是通过引用传递的,根据您正在做的事情,我猜您希望创建数组的副本 var permute = function(n
result.pop
将起作用。这是因为Javascript通过引用而不是值来传递对象/数组。您可能希望通读以下内容以完全理解它列表不是空的…其中有24个空数组您是指result.pop()影响控制台结果?是的,你是对的,但为什么?你还有其他问题-如果你在代码中分散一些控制台日志,你会发现你根本不会得到排列…你最终(在全部销毁之前)使用相同的24次置换,当您将数组作为参数传入时,它是通过引用传递的,根据您正在做的事情,我猜您希望创建数组的副本
var permute = function(nums) {
let list=[];
generate=function(flag,result){
if(flag===nums.length){
list.push(result);//add something to list
return ;
}
//同位遍历
for(let i =0;i<nums.length;i++){
//skip重复
if(result.includes(nums[i])) continue;
result.push(nums[i]);
generate(flag+1,result);
//递归结束后弹出尾项
result.pop();
}
}
generate(0,[]);
console.log(list);//but it's empty
};
permute([1,2,3,4]);