引言
让一个递归函数将值推入数组中。我从功能块中初始化数组。数组在功能块之外初始化的事实不应该成为JavaScript函数处理其作用域之外定义的变量的属性的问题。如下所示,相同的代码段分为2个版本,第一个具有一般范围的数组,第二个具有2个嵌套函数。结果也被粘贴,是一样的。但是,当在功能块外部初始化数组时,此代码未通过fcc exercise中的测试。
-第一个代码段:未通过测试。
var newArr = [];
function steamroller(arr) {
while (arr.length > 0) {
if (Array.isArray(arr[0])) {
steamroller(arr[0]);
}
else {newArr.push(arr[0]);
console.log("newArr ", newArr);
}
arr.shift();
}
// I'm a steamroller, baby
return newArr;
}
steamroller([1, {}, [3, [[4]]]]);
及其输出:
Native Browser JavaScript
newArr [ 1 ]
newArr [ 1, {} ]
newArr [ 1, {}, 3 ]
newArr [ 1, {}, 3, 4 ]
=> [ 1, {}, 3, 4 ]
-第二段通过测试:
function steamroller(arr) {//1
var newArr = [];
function ude(arr){//2
while (arr.length > 0) {//3
if (Array.isArray(arr[0])) {//4
ude(arr[0]);
}//4c
else {newArr.push(arr[0]);
console.log("newArr ", newArr);
}//3c
arr.shift();
}
// I'm a steamroller, baby
return newArr;
}
return ude(arr);
}
steamroller([1, {}, [3, [[4]]]]);
及其输出:
Native Browser JavaScript
newArr [ 1 ]
newArr [ 1, {} ]
newArr [ 1, {}, 3 ]
newArr [ 1, {}, 3, 4 ]
=> [ 1, {}, 3, 4 ]
问题:
有什么区别?
也许这对您有所帮助。每个对象都有一个内置的toString
方法。
Array.prototype.toString()
方法返回一个表示指定数组及其元素的字符串。语法
toString()
参数
无。
说明
Array对象覆盖Object的toString方法。对于Array对象,toString方法连接该数组并返回一个字符串,其中包含用逗号分隔的每个数组元素。
编辑:
如何使用本地数组收集元素的示例。
arr.toString()
答案是该程序已由浏览器以许多连续值进行测试。但是,名为“ newArray”的数组不会在两次测试之间重新初始化,因为当我们启动函数时,当它是全局变量时,它不会重置。很简单。