Я писал простую рекурсивную функцию в JavaScript и сталкивался с каким-то действительно странным поведением. Сначала я подумал, что это ошибка в браузере, но я попробовал его в FireFox, Chrome и IE9, и все они ведут себя точно так же.Может кто-нибудь объяснить эту загадку JavaScript?
В приведенном ниже HTML-файле выполняется простая функция JS при загрузке страницы. Функция рекурсивна (вызывает себя ровно один раз). По сути, функция создает новый объект Array и возвращает его. Странно то, что после того, как функция вызывает себя рекурсивно, х и у ссылаются на один и тот же объект, который, насколько я понимаю, не должен происходить. Также, если вы раскомментируете последнюю строку перед , возвращаете x, предупреждение «x == y» предупреждение не отображается.
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>JavaScript weirdness...</title>
<script type="text/javascript" language="javascript">
function RecursiveF(n) {
x = [ n ];
if (n > 0) {
y = RecursiveF(n - 1);
if (x == y)
alert('x == y');
}
//if (n == 0) return [ n ];
return x;
}
</script>
</head><body onload="javascript:RecursiveF(1);"></body></html>
Любые намеки почему «х == у» предупреждение появляется на этой странице?