2013-09-16 3 views
0

Почему это работает?Недопустимая подпись JavaScript по-прежнему вызывает правильный API

<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.

+0

Я только что протестировал на домашней функции ... похоже, что javascript не выдает ошибку при передаче параметра там, где он не нужен или не определен в сигнатуре функции. –

ответ

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

Если у меня есть следующие функции JavaScript

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

JavaScript выполнит и возвратит для всех следующих

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

Если вы хотите иметь дело со всем переданным параметром. вы можете получить их из «аргументов». MDN link

Смежные вопросы