javascript初始化函数外部函数的结果

时间:2015-11-29 17:01:35

标签: javascript function global-variables

引言

设为推送数组中值的递归函数。 我从功能块初始化数组。数组在函数外部初始化的事实不应该是一个问题,而javascript函数的属性是操纵在此范围之外定义的变量。 请参阅下文,相同的片段分为2个版本,第一个带有一般范围内的数组,第二个带有2个嵌套函数。结果也粘贴了,它是一样的。 但是当arrray在函数外部初始化时,此代码不会通过fcc练习中的测试。

- 第一个代码段:未通过测试。

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 ]   

问题:

有什么区别?

2 个答案:

答案 0 :(得分:0)

也许这对你有所帮助。每个对象都有一个内置的toString方法。

Array.prototype.toString()

  

toString()方法返回表示指定数组及其元素的字符串。

     

语法

arr.toString()
     

<强>参数

     

无。

     

描述

     

Array对象会覆盖Object的toString方法。对于Array对象,toString方法连接数组并返回一个字符串,其中包含用逗号分隔的每个数组元素。

编辑:

如何使用本地数组收集元素的示例。

function steamroller(arr) {
    var newArr = [];
    while (arr.length) {
        if (Array.isArray(arr[0])) {
            newArr = newArr.concat(steamroller(arr[0]));
        } else {
            newArr.push(arr[0]);
        }
        arr.shift();
    }
    return newArr;
}
document.write('<pre>' + steamroller([1, {}, [3, [[4]]]]) + '</pre>');
document.write('<pre>' + JSON.stringify(steamroller([1, {}, [3, [[4]]]]), 0, 4) + '</pre>');

答案 1 :(得分:0)

答案是该程序由浏览器测试,具有许多连续值。 但阵列名为&#34; newArray&#34;两次测试之间不会清空,因为每当我们启动函数时,它都不会在她是全局变量时重置。很简单。