Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';我的JavaScript搜索递归循环有什么问题?_Javascript_Recursion - Fatal编程技术网

什么';我的JavaScript搜索递归循环有什么问题?

什么';我的JavaScript搜索递归循环有什么问题?,javascript,recursion,Javascript,Recursion,我似乎不明白为什么我的递归搜索不会以递归方式进行 你知道怎么了吗?我的草堆[I]放错地方了吗?因为我没有看到它。我试着在这个网站上浏览一些例子,但我想不出这么简单的东西 search = function(needle, haystack) { len = haystack.length; for (var i = 0; i < len; i++) { if (typeof haystack[i] == 'object') {

我似乎不明白为什么我的递归搜索不会以递归方式进行

你知道怎么了吗?我的草堆[I]放错地方了吗?因为我没有看到它。我试着在这个网站上浏览一些例子,但我想不出这么简单的东西

search = function(needle, haystack) {

    len = haystack.length;
    for (var i = 0; i < len; i++)
    {
        if (typeof haystack[i] == 'object') {
            search(needle, haystack[i])
        } else {
            if (needle == haystack[i]) {
                console.log('found');
                return;
            }
            console.log('value: ' + haystack[i])
        }
    }
}

var test = [[1], [2], [3,4], [5,6]]
search(4, test)
search=功能(针、草垛){
len=干草堆长度;
对于(变量i=0;i

或者看到小提琴@(打开控制台)

你在
len
前面缺少
var
,它应该是
var len=haystack.length否则它将被视为全局变量


当haystack=[[1]、[2]、[3,4]、[5,6]]时,len=4,但再次调用
search(4[1])
,然后分配
len=1
,然后当循环返回
len=1
的值,而不是原始的4,因为它是一个全局变量。现在i=2,len=1,因此循环存在在
len
前面缺少
var
,它应该是
var len=haystack.length否则它将被视为全局变量


当haystack=[[1]、[2]、[3,4]、[5,6]]时,len=4,但再次调用
search(4[1])
,然后分配
len=1
,然后当循环返回
len=1
的值,而不是原始的4,因为它是一个全局变量。现在i=2,len=1,因此循环存在

@doorknoble是的,它将。。。你测试过它吗。这很有趣,为什么?(+1)为什么将全局变量更改为局部变量很重要?@doorknold在第一次递归调用后,
len
将设置为
1
[1]。length
)。返回原始调用,
i
将为
false
,因为
i++
也将
i
设置为
1
,结束该循环并阻止进一步搜索。作用域
len
允许它在第一次调用时保持设置为
4
。非常感谢,这很有意义。我甚至想不出这是个问题,太好了,非常感谢@门把手是的,它会。。。你测试过它吗。这很有趣,为什么?(+1)为什么将全局变量更改为局部变量很重要?@doorknold在第一次递归调用后,
len
将设置为
1
[1]。length
)。返回原始调用,
i
将为
false
,因为
i++
也将
i
设置为
1
,结束该循环并阻止进一步搜索。作用域
len
允许它在第一次调用时保持设置为
4
。非常感谢,这很有意义。我甚至想不出这是个问题,太好了,非常感谢!