无效的JavaScript签名仍然会调用正确的API

时间:2013-09-16 13:23:15

标签: javascript api webkit v8 sfx

为什么会这样?

<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控制台上抛出任何错误。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果我有以下JavaScript函数

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

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

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

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