@Nikolay37

Каким образом неправильно условие выполняется?

go()

function go(){
if (i < body["car"].length){
 if(body["car"][i].hasOwnProperty('class') == false){
 i++ 
 go()
 }
 console.log('ok')
 i++
 go()
} else if (i>= body["car"].length){
  console.log('exit')
}
}


Почему все выполняется хорошо, до тех пор пока условие if(body["car"][i].hasOwnProperty('class') не выполняется? Как оно выполнится и чем больше выполнений, тем дальше первое условие будет выполняться. Т.е.
Вот например выполняется функция, а потом выполнилось условие с проверкой элемента, все хорошо, дальше опять вызов функции go и если вдруг элемент I=14, а body["car"].length = 15, дальше мы увеличиваем i++ (т.е. i=15), после вызов функции go и вот это условие if (i < body["car"].length) ВЕРНОЕ, почему? Как оно может быть верным? Ведь i == body['car'].length, а не меньше его
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
megafax
@megafax
web-программист
Проверяем чуть дополненный
body = {"car": [
	'asd',
	'ddddd',
	{
		class: 'asd'
	},
	'dddd'
]}

i = 0

function go(level = 1) {
	console.log(i, level)
	if (i < body["car"].length) {
		if (body["car"][i].hasOwnProperty('class') == false) {
			i++
			go(level + 1)
		}
		console.log('ok')
		i++
		go(level + 1)
	}
	else if (i >= body["car"].length) {
		console.log('exit')
	}
}


Имеем вывод:
0 1
1 2
2 3
ok
3 4
4 5
exit
ok
5 5
exit
ok
6 3
exit
ok
7 2
exit

Соответственно смотрим какой уровень вложенности, т.е. все верно отрабатывает, ведь еще ж надо выйти из рекурсии

Но если мы добавим return
function go(level = 1) {
	console.log(i, level)
	if (i < body["car"].length) {
		if (body["car"][i].hasOwnProperty('class') == false) {
			i++
			return go(level + 1)
		}
		console.log('ok')
		i++
		return go(level + 1)
	}
	else if (i >= body["car"].length) {
		console.log('exit')
	}
}

То вывод тоже поменяется
0 1
1 2
2 3
ok
3 4
4 5
exit

Возможно это требовалось ?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы