Cet article vous apporte une explication détaillée de la fonction arguments en JavaScript (avec des exemples). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Vue d'ensemble
Les fonctions de JavaScript diffèrent des autres langages orientés objet de plusieurs manières.
Il n'y a pas de surcharge de fonctions
Il existe un argument d'objet de type tableau
1. Surcharge de fonctions
Pour faire simple, JAVA permet à plusieurs fonctions d'une même classe d'avoir le même nom de fonction, mais des déclarations de paramètres différentes.
Mais JS ne prend pas en charge la surcharge de fonctions :
function foo(num) {
console.log(num + 100)
}
function foo(num) {
console.log(num + 200)
}
foo(100); // 300
Copier après la connexion
Si deux fonctions portant le même nom sont définies dans js, alors le nom n'appartient qu'à la fonction définie ultérieurement.
2. Tableau de classe Arguments
L'objet arguments de fonction est une variable locale disponible dans toutes les fonctions (non fléchées) et est un objet de type tableau. Vous pouvez référencer les paramètres (réels) d'une fonction dans une fonction à l'aide de l'objet arguments.
function foo() {
console.log(arguments);
}
foo(1, "foo", false, {name: "bar"}); // [1, "foo", false, object]
Copier après la connexion
function foo() {
console.log(typeof arguments);
}
foo(1, "foo", false, {name: "bar"}); // object
Copier après la connexion
Ainsi, arguments est un objet de style tableau avec une propriété de longueur et des indices pour indexer les éléments.
3. Attributs des arguments
longueur
function foo(num1, num2, num3) {
console.log(arguments)
}
foo(1); // [1]
Copier après la connexion
attribut longueur Indique le nombre réel de paramètres passés dans la fonction, et non le nombre de paramètres formels lorsque la fonction a été déclarée.
appelé appelé représente la fonction elle-même, nous pouvons l'appeler via l'appelé dans la fonction.
4. Convertir en tableau réel
- slice
l'objet arguments ne prend pas en charge d'autres méthodes de tableau, mais vous pouvez utilisez Function .call pour appeler indirectement.
function sayHi() {
console.log(Array.prototype.slice.call(arguments, 0))
}
sayHi("hello", "你好", "bonjour") //["hello", "你好", "bonjour"]
Copier après la connexion
- épissure
function sayHi() {
console.log(Array.prototype.splice.call(arguments, 0));
}
sayHi("hello", "你好", "bonjour") //["hello", "你好", "bonjour"]
Copier après la connexion
- Array.from
function sayHi() {
console.log(Array.from(arguments));
}
sayHi("hello", "你好", "bonjour") //["hello", "你好", "bonjour"]
Copier après la connexion
- Opérateur d'extension
function sayHi(...arguments) {
console.log(arguments);
}
sayHi("hello", "你好", "bonjour") //["hello", "你好", "bonjour"]
Copier après la connexion
Mode strict
La performance des arguments en mode strict et en mode non strict. L'affichage n'est pas le même.
// 严格模式
function foo(a, b) {
"use strict";
console.log(a, arguments[0]);
a = 10;
console.log(a, arguments[0]);
arguments[0] = 20;
console.log(a, arguments[0]);
b = 30;
console.log(b, arguments[1])
}
foo(1);
输出:
1 1
10 1
10 20
30 undefined
// 非严格模式
function foo(a, b) {
console.log(a, arguments[0]);
a = 10;
console.log(a, arguments[0]);
arguments[0] = 20;
console.log(a, arguments[0]);
b = 30;
console.log(b, arguments[1]);
}
foo(1);
输出:
1 1
10 10
20 20
30 undefined
Copier après la connexion
En mode non strict, les valeurs des paramètres, les paramètres réels et les arguments transmis seront partagés. Lorsque rien n'est transmis, les valeurs réelles et les arguments ne seront pas partagés.
En mode strict, les valeurs des paramètres et arguments réels ne sont pas partagées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!