Javascript 我的函数没有';我什么也不退

Javascript 我的函数没有';我什么也不退,javascript,arrays,algorithm,heap,Javascript,Arrays,Algorithm,Heap,我在Heap函数中插入了一个字符串数组。尽管函数generate()正确打印输出console.log(permut),它不返回任何数据 带有返回arr的版本1 var arrStr = ['a', 'a', 'b']; var generated = generate(arrStr, arrStr.length); console.log(g2); function generate(arr, n) { if (n === 1) { console.lo

我在Heap函数中插入了一个字符串数组。尽管
函数generate()
正确打印输出
console.log(permut),它不返回任何数据

带有返回arr的版本1

  var arrStr = ['a', 'a', 'b'];
  var generated = generate(arrStr, arrStr.length);
  console.log(g2);


  function generate(arr, n) {
    if (n === 1) {
      console.log(arr);
      return arr;
    } else {
      for (var i = 0; i < n; i++) {
        generate(arr, n - 1);
        if (n % 2 === 0) {
          swap(i, n-1, arr);
        } else {
          swap(0, n-1, arr);
        }
      }
    }
  }

  function swap(a, b, ar) {
    var temp = ar[b];
    ar[b] = ar[a];
    ar[a] = temp;
  }
版本1返回未定义的变量
生成的
,版本2返回空数组


我试图返回一个测试字符串'asd',但仍然没有得到任何结果。

JavaScript函数中声明的变量成为函数的局部变量。查看Javascript作用域。换句话说,对函数内部的函数参数所做的更改不会影响函数外部的参数变量

只需在算法结束时返回生成的对象

例如:

var n = 1;
incrementByOne(n);
console.log(n) //still 1

function incrementByOne(number) {
    number++;
}
解决方案是返回结果并使用变量获取:

var n = 1;
n = incrementByOne(n);
console.log(n) //now it's 2

function incrementByOne(number) {
    return number++;
}

递归调用函数,但如何处理递归调用的结果?在
else
路径中,您实际返回了什么?该函数工作正常。在
else
路径中,
n
被减少,直到执行问题返回的
n==1
。在显示的代码中,如果
n!==1
(即在
其他部分
中)您没有
返回
语句。也就是说,函数不返回任何内容。如果要返回值,实际上必须使用
return
语句<代码>如果。。。else
是二进制的,因为它要么执行某些操作(如果条件为true),要么执行其他操作。在函数中,somethinelse部分由第一个初始调用执行,它不返回任何内容。我建议您在调试器中逐步完成代码。谢谢,我刚刚开始使用Mozilla的调试器。我想这就是我在
var generated=generate(arrStr,arrStr.length)中所做的你想用这个算法做什么?
var n = 1;
n = incrementByOne(n);
console.log(n) //now it's 2

function incrementByOne(number) {
    return number++;
}