106 votes

Que se passe-t-il si je ne passe pas de paramètre dans une fonction Javascript ?

Je suis nouveau dans le monde du Javascript et je bricole en écrivant des fonctions très basiques. Je suis tombé par hasard sur l'exemple ci-dessous et je ne sais pas pourquoi il fonctionne alors que je ne passe pas de paramètre lorsque la fonction le demande.

Fonction d'échantillon

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

Maintenant, si j'appelle la fonction myfunction(); L'alerte m'est présentée. Comment se fait-il que je puisse appeler la fonction sans aucune erreur ni avertissement alors que je n'ai pas passé de paramètre ?

EDITAR

Je ne m'attendais pas à autant de bonnes réponses et je ne suis pas encore en mesure de dire quelle est la meilleure réponse. Je peux donc demander aux gens de suggérer la meilleure réponse et j'attribuerai l'acceptation à cette personne.

130voto

gdoron Points 61066

Rien ne se passera - ce qui signifie que vous n'obtiendrez pas d'erreur ou d'avertissement car le passage des paramètres en javascript est facultatif.
Tous les paramètres qui n'ont pas été "fournis" auront l'attribut undefined valeur .

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

foo(1);

A l'intérieur de la foo fonctionne maintenant :

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

Vous pouvez même passer plus d'arguments, comme :

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

Vous pouvez connaître les quantités de paramètres fournies par arguments.length à l'intérieur de la fonction.

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);

Exemple de fonction utile qui gère n'importe quel nombre de paramètres :

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

alert(max(1, 5, 7, 2, 88, 32, 44));

10voto

j08691 Points 86464

Tous les arguments des fonctions JavaScript sont facultatifs (lisez "typés de manière imprécise").

Les fonctions JavaScript peuvent être invoquées avec un nombre quelconque d'arguments, indépendamment du nombre d'arguments nommés dans la définition de la fonction. de la fonction. Comme une fonction est faiblement typée, il n'y a aucun moyen pour elle de déclarer le type d'arguments qu'elle attend. de déclarer le type d'arguments qu'elle attend, et il est légal de transmettre des de passer des valeurs de n'importe quel type à n'importe quelle fonction. Lorsqu'une fonction est invoquée avec moins d'arguments que ceux qui sont déclarés, les arguments supplémentaires ont la valeur indéfinie.

Vous pouvez faire référence aux arguments d'une fonction à l'intérieur de la fonction en utilisant les variables d'arguments nommées ou l'objet arguments. Cet objet contient une entrée pour chaque argument passé à la fonction, l'index de la première entrée commençant à 0. Par exemple, si une fonction reçoit trois arguments, vous pouvez faire référence à l'argument comme suit :

arguments[0]
arguments[1]
arguments[2]
  • JavaScript - The Definitive Guide, 5e édition

7voto

Pointy Points 172438

C'est comme ça que fonctionne JavaScript. Les paramètres sont facultatifs et auront la valeur "non définie" dans la fonction s'ils sont absents d'un appel de fonction.

Par "optionnel", j'entends juste cela : invoquer tout implique une liste arbitrairement longue de paramètres. Il n'y a pas forcément de relation entre le nombre de paramètres passé à une fonction et le nombre déclaré . La meilleure façon de penser à cette déclaration, alors :

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

est que vous déclarez une fonction et que vous liez le nom "a" au premier paramètre, "b" au deuxième et "c" au troisième. Cependant, il n'est pas du tout garanti que l'un d'entre eux en fait être lié à une valeur dans toute invocation donnée de la fonction par la suite.

De la même manière, vous pouvez définir une fonction sans aucun paramètre, puis les "trouver" via la fonction arguments objet :

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

Donc ce n'est pas tout à fait est identique à la première fonction, mais elle est proche dans la plupart des aspects qui comptent en pratique.

La valeur "undefined" en JavaScript est une valeur, mais sa sémantique est plutôt inhabituelle pour un langage. En particulier, ce n'est pas exactement la même chose que la fonction null valeur. De plus, "undefined" lui-même n'est pas un mot-clé ; c'est juste un nom de variable semi-spécial !

4voto

Rocket Hazmat Points 87407

JavaScript n'a pas de valeurs par défaut pour les paramètres des fonctions, contrairement aux autres langages. Vous pouvez donc passer autant ou aussi peu d'arguments que vous le souhaitez.

Si vous ne passez pas une valeur, le paramètre est undefined .

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

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

Si vous passez plus de paramètres qu'il n'y en a dans la signature, vous pouvez utiliser la commande arguments .

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

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

2voto

AlbertVanHalen Points 74

Vous pouvez également fournir plus d'arguments que celui mentionné dans la fonction

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

Vous pouvez utiliser le arguments qui est un tableau afin d'afficher les arguments fournis.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X