【发布时间】:2010-10-07 05:28:48
【问题描述】:
我正在用 JavaScript 编写一个简单的递归函数,但遇到了一些非常奇怪的行为。起初我以为是浏览器的 bug,但我在 FireFox、Chrome 和 IE9 中尝试过,它们的行为方式完全相同。
下面的 HTML 文件在页面加载时运行一个简单的 JS 函数。该函数是递归的(只调用一次)。本质上,该函数创建一个新的 Array 对象并返回它。奇怪的是,在函数递归调用自身之后, x 和 y 引用同一个对象,据我所知,这不应该发生。此外,如果您取消注释 return 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>
关于为什么 "x == y" 警报出现在此页面中的任何提示?
【问题讨论】:
标签: javascript