2013-08-22 2 views
0

Я не могу понять, почему мой рекурсивный поиск не будет вести себя рекурсивно.Что случилось с моим JavaScript Search Recursive Loop?

Вы видите, что не так? Есть ли у меня haystack[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) 

Или увидеть скрипку @http://jsfiddle.net/aniyishay/TBMmK/ (Открыть консоль)

ответ

3

У вас не хватает var перед len, она должна быть var len = haystack.length; в противном случае она рассматривается как глобальная переменная.

, когда стог = [[1], [2], [3,4], [5,6]], то Len = 4, но опять search(4, [1]) называется тогда len = 1 будет assinged тогда, когда цикл возвращается значение len = 1 вместо исходного 4, потому что это глобальная переменная. Теперь я = 2 и Len = 1, так что цикл существует

+0

@Doorknob да будет ... ты проверить это –

+0

@Doorknob проверку http://jsfiddle.net/arunpjohny/qxfXb/1/ –

+0

Hm. Это интересно, почему? (+1) Почему меняется глобальная переменная на локальную? – Doorknob

Смежные вопросы