underscore.js里内部函数flatten的一个递归问题?

var flatten = function(input,shallow,strict,startIndex){
    var output = [], idx =0;
    for(var i = startIndex || 0,length =input && input.length;i < length;i++){
        var value = input[i];
        if(isArrayLike(value)
           &&(_.isArray(value) ||_.isArguments(value))){
            if(!shallow) value = flatten(value,shallow,strict);//这里的value递归不是很懂,具体细节是怎样的?麻烦大神讲解一下
            var j = 0, len = value.length;
            output.length += len;
            while(j<len){
                output[idx++] = value[j++];
            }
        }else if(!strict){
            output[idx++] = value;
        }
    }
    return output;
};
阅读 2.1k
1 个回答
if(isArrayLike(value) //注意这一句

到最后一层已经不是数组了,不会进这个if,会走到下面这里

else if(!strict){
            output[idx++] = value;
        }

因此你的担心不存在

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题