javascript 递归调用

上源码:underscore.js

  var flatten = function(input, shallow, output) {
    if (shallow && _.every(input, _.isArray)) {
      return concat.apply(output, input);
    }
    each(input, function(value) {
      if (_.isArray(value) || _.isArguments(value)) {
        shallow ? push.apply(output, value) : flatten(value, shallow, output);
      } else {
        output.push(value);
      }
    });
    return output;
  };

自己写的一个简易递归:

        /**
         * demo([1,3,[45,[76,34],5]]);
         * demo([1,3,45,5])
         */
        function demo(arr) {
            var result = [];
            (function f(a) {
                var i;
                for(i=0;i<a.length;i++){
                    if (a[i] instanceof Array) {
                        f(a[i]);                        
                    } else {
                        result.push(a[i]);
                    };
                }
            })(arr);
            return result;
        }