Подтвердить что ты не робот

Что произойдет, если я не передам параметр в функции Javascript?

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

Пример функции

function myfunction(x) {
    alert("This is a sample alert");
}

Теперь, если я вызываю функцию myfunction();, я получаю предупреждение. Почему я могу вызвать функцию без каких-либо ошибок или предупреждений, когда я не передал параметр?

ИЗМЕНИТЬ

Я не ожидал стольких замечательных ответов, и я ни в коем случае не в состоянии сказать, какой ответ лучше, поэтому я могу попросить людей предложить лучший ответ, и я приму признание этого человек.

4b9b3361

Ответ 1

Ничего не произойдет - это означает, что вы не получите ошибку или предупреждение, поскольку передача параметров в javascript является необязательной.
Все параметры, которые не были "поставлены", будут иметь значение undefined.

function foo(x, y, z){
    //...
}

foo(1);

Внутри функции foo:

function foo(x, y, z){
    x === 1
    y === undefined
    z === undefined
}

Вы можете даже передать больше аргументов, например:

foo(1,2,3,4,5,7); // Valid!

Вы можете узнать количество параметров, предоставленных arguments.length внутри функции.

Live DEMO


Код из DEMO:

function foo(x, y, z) {
    console.log('x value: ' + x);
    console.log('y value: ' + y);
    console.log('z value: ' + z);
    console.log('Arguments length: ' + arguments.length);
}

console.log('Zero parameters');
foo();
console.log('Four parameters');
foo(1, 2, 3, 4);​

Пример полезной функции, которая обрабатывает любое количество параметров:

function max() {
    var maxValue = arguments[0];
    for (var i = 1; i < arguments.length; i++) {
        if (maxValue < arguments[i]) {
            maxValue = arguments[i];
        }
    }
    return maxValue;
}

Live DEMO

Ответ 2

Все аргументы в функциях JavaScript являются необязательными (читайте "свободно напечатанные" ).

Функции JavaScript могут быть вызваны с любым количеством аргументов, независимо от количества аргументов, названных в функции определение. Поскольку функция свободно набирается, нет возможности для он должен объявить тип аргументов, который он ожидает, и передавать значения любого типа в любую функцию. Когда функция вызывается с меньшим количеством аргументов, чем объявлены, дополнительные аргументы имеют значение undefined.

Вы можете ссылаться на аргументы функции внутри функции, используя переменные имени и аргументы. Этот объект содержит запись для каждого аргумента, переданного функции, индекс первой записи, начинающийся с 0. Например, если функции передаются три аргумента, вы можете обратиться к аргументу следующим образом:

arguments[0]
arguments[1]
arguments[2]
  • JavaScript - окончательное руководство, пятое издание

Ответ 3

Вот как работает JavaScript. Параметры являются необязательными и будут иметь значение не "действительно-значение-значение" undefined "в функции, если они отсутствуют в вызове функции.

Под "необязательным" я имею в виду только то, что: вызов любой функции включает произвольно длинный список параметров. Между количеством параметров, переданных функции, и объявленным номером не должно быть никакой связи. Лучший способ подумать об этом объявлении, затем:

function x(a, b, c) {
  // ...
}

заключается в том, что вы объявляете функцию и привязываете имя "a" к первому параметру "b" ко второму, а "c" - к третьему. Однако отнюдь не гарантировано, что любой из них на самом деле будет привязан к значению в любом заданном вызове функции позже.

Таким же образом вы можете определить функцию без каких-либо параметров, а затем "найти" их через объект arguments:

function noArgs() {
  var a = arguments[0], b = arguments[1], c = arguments[2];
  // ...
}

Итак, это не совсем то же самое, что и первая функция, но она почти полностью закрывается.

Значение "undefined" в JavaScript является значением, но его семантика является необычной, поскольку языки идут. В частности, это не совсем то же самое, что значение null. Кроме того, "undefined" сам по себе не является ключевым словом; это просто полуспециальное имя переменной!

Ответ 4

JavaScript не имеет значений по умолчанию для параметров функции, как это делают другие языки. Таким образом, вы можете передать столько или меньше аргументов, сколько хотите.

Если вы не передадите значение, параметр undefined.

function myfunction(x) {
    alert(x);
}

myfunction(); // alerts undefined
myfunction(1); // alerts 1
myfunction(1,2,3); // alerts 1

Если вы передадите больше параметров, чем в подписи, вы можете использовать arguments.

function myfunction(x) {
    alert(x);
    console.log(arguments);
}

myfunction(1,2,3); // alerts 1, logs [1,2,3]

Ответ 5

Потому что нет ошибки, пока функция не сможет работать с параметром, который вы должны пройти.

Например:

function myfunction(x) {
    return x*2;
}

Выпустил бы ошибку; хотя, вероятно, только a NaN (в данном случае) или variable is undefined.

Ответ 6

Вы также можете предоставить больше аргументов, чем тот, который указан в функции

myFunction(1,2,3,4,5,6,7,'etc');

Вы можете использовать свойство arguments, которое является массивом, чтобы просмотреть предоставленные аргументы.

Ответ 7

Если вы опустите аргумент, его значение будет undefined. Это позволяет вам легко создавать необязательные параметры.

Другая особенность - это возможность определять функцию без параметров и успешно использовать ее с аргументами, используя объект arguments. Это позволяет легко создавать массивы аргументов переменной длины.