Вопрос о параметрах функции Javascript
Я пытался написать некоторую функцию javascript и понял, что
function testFunction(input_1, input_2, input_3) {
alert("alert");
}
однако, когда я вызываю функцию следующим образом:
<input type="button" value="click" onclick="testFunction("1", "2")">
почему он будет работать даже с двумя параметрами?
Ответы
Ответ 1
Вы можете вызвать функцию Javascript с любым количеством параметров, независимо от определения функции.
Любые именованные параметры, которые не были переданы, будут undefined
.
Дополнительные параметры могут быть доступны через объект arguments
, похожий на массив.
Ответ 2
На самом деле не важно, сколько параметров вы предоставляете. функция интерпретирует их и создает объект arguments
(который действует как массив параметров).
Вот пример:
function sum(){
if(arguments.length === 0)
return 0;
if(arguments.length === 1)
return arguments[0];
return arguments[0] + sum.apply(this, [].slice.call(arguments, 1));
}
Это не самое эффективное решение, но оно обеспечивает короткий пик того, как функции могут обрабатывать аргументы.
Ответ 3
Поскольку javascript рассматривает ваши параметры как массив; если вы никогда не выходите за второй пункт, он никогда не замечает, что аргумент отсутствует.
Ответ 4
третий параметр может быть необязательным и будет иметь значение по умолчанию null.
Если вы явно хотите потребовать параметр, это другая история.
Ответ 5
Поскольку параметры являются необязательными
Некоторые чтения:
http://www.tipstrs.com/tip/354/Using-optional-parameters-in-Javascript-functions
Ответ 6
Javascript - очень динамичный язык и будет принимать значение "undefined" для любых параметров, не переданных значения.
Ответ 7
Попробуйте использовать приведенный ниже код
var CVH = {
createFunction: function (validationFunction, extParamData, extParamData1) {
var originalFunction = validationFunction;
var extParam = extParamData;
var extParam1 = extParamData1;
return function (src, args) {
// Proxy the call...
return originalFunction(src, args, extParam, extParam1);
}
}
}
function testFunction(input_1, input_2, input_3) {
alert("alert");
}
и вы можете вызвать эту функцию, как показано ниже
<input type="button" value="click" onclick="CVH.createFunction(testFunction('1', '2'),'3','4')">
Ответ 8
Javascript не поддерживает перегрузку метода, поэтому метод будет выполняться в порядке их появления, независимо от передаваемых аргументов. Поскольку у javascript нет проверки типов для аргументов или необходимого количества аргументов, вы можете просто иметь одну реализацию testFunction(), которая может адаптироваться к тем или иным аргументам. были переданы ему путем проверки типа, наличия или количества аргументов..