0

为什么这行得通?

<html>
<body id = "body">
<div id="para">hello world, invalid js API signature doesn't throw error !!!</div>
<script>
var temp = document.getSelection("parameter");
</script>
</body>
</html>

根据标准签名,getSelection() 不采用任何参数。我已经对此进行了测试,它也不会在 JS 控制台上引发任何错误。

4

2 回答 2

2

如果您使用错误数量的参数调用函数,JavaScript 不会抱怨。如果传递的参数少于声明的参数,则额外参数的值为undefined。如果还有更多,它们将被忽略。这是一个功能,而不是一个错误!

在 JavaScript 函数中,您可以访问arguments值,它是一个类似数组的结构,包含传递给它的所有参数。如果您愿意,您可以将所有函数定义为采用 0 个参数并使用arguments[0],arguments[1]等代替您以前拥有的命名参数(尽管我不明白为什么会这样做),并且这些函数仍然可以完全一样地工作。

拥有这种arguments结构并且对调用函数的参数数量没有限制的好处使您可以做非常强大的事情,例如在此处找到的绑定 polyfill:https ://developer.mozilla.org/en-US/docs/Web /JavaScript/Reference/Global_Objects/Function/bind

于 2013-09-16T14:42:13.580 回答
1

如果我有以下 JavaScript 函数

function foo(first, last){
    return "from Foo";
}

JavaScript 将执行并返回以下所有内容

foo();
foo(2);
foo("abc");
foo("abc", 3, 5);

如果要处理所有传递的参数。你可以从“论点”中得到那些。 MDN 链接

于 2013-09-17T15:25:17.693 回答