<html>
<head>
</head>
<body>
<p id="test"> </p>
<script>
function numbers() {
var qwe,
zxc = - Infinity;
// arguments.length == 4 , right?
for (qwe = 0; qwe < arguments.length; qwe++) {
if (arguments[qwe] > zxc) {
// If arguments[qwe] which is equalto11isgreaterthan - Infinity--TRUE, right ?
zxc = arguments[qwe]; // why does the output become 25 ?
}
}
return zxc; // is it because of this ?
}
document.getElementById('test').innerHTML = numbers(13, 10, 25, 11);
</script>
</body>
</html>
为什么输出变为25?
答案 0 :(得分:2)
Arguments.length确实等于4,因为你已经发送了4个参数(13,10,25,11)。你的for循环迭代4个参数,然后找到参数[qwe]。让我们分解一下:
此时,qwe =参数长度,因此for循环结束。一旦for循环结束,我们返回zxc,此时为25。
答案 1 :(得分:0)
使用此循环返回的内容是作为函数参数传递的最大数字。查看您作为参数传递的数字:13, 10, 25, 11
。
你的循环正在通过这些传递的整数并进行比较。将第一个索引(在这种情况下为13
)与负无穷大进行比较。因为它更大,所以zxc
变量被重写(每当当前索引大于前一个索引时会发生这种情况)。在您的情况下,25
是参数列表中的最大整数,它是从函数返回的最终值。
要测试它,请将11更改为29并查看会发生什么。 25不再是最大的数字,也不会写入#test
元素。