[英]My function doesn't return anything
我已经在Heap的函数中插入了一个字符串数组。 尽管function generate()
可以正确打印输出console.log(permut);
,它不返回任何数据。
版本1,带有return arr
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;
}
版本2带有permut = permut.concat(arr);
var arrStr = ['a', 'a', 'b'];
var generated = [];
generate(arrStr, arrStr.length, generated);
console.log(generated);
function generate(arr, n, permut) {
if (n === 1) {
permut = permut.concat(arr);
//console.log(permut);
} else {
for (var i = 0; i < n; i++) {
generate(arr, n - 1, permut);
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返回未定义的generated
变量,版本2返回空数组。
我试图返回测试字符串'asd',但仍然什么也没得到。
在JavaScript函数中声明的变量在该函数中变为LOCAL。 看一下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++;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.