Table des matières
Implémentation des paramètres des variables JS 1 : arguments
JS可变参数的实现二:rest 参数(...)
Maison interface Web js tutoriel Explication détaillée de la façon dont les fonctions JavaScript implémentent les paramètres variables ? (Partage du résumé)

Explication détaillée de la façon dont les fonctions JavaScript implémentent les paramètres variables ? (Partage du résumé)

Aug 04, 2022 pm 02:35 PM
javascript 函数 可变参数

JS est un langage faiblement typé et ne peut pas utiliser le mot-clé param pour déclarer que le paramètre formel est un paramètre variable comme C#. Alors comment implémenter ce paramètre variable en js ? L'article suivant parlera de la méthode d'implémentation des paramètres des variables de fonction JavaScript. J'espère qu'il sera utile à tout le monde !

Explication détaillée de la façon dont les fonctions JavaScript implémentent les paramètres variables ? (Partage du résumé)

Implémentation des paramètres des variables JS 1 : arguments

Que sont les arguments ? Comment implémenter des paramètres variables ?

arguments est un objet de type tableau correspondant aux arguments passés à la fonction.

Dans ES5, vous pouvez utiliser l'objet arguments pour implémenter des paramètres variables.

La longueur de l'objet arguments est déterminée par le nombre de paramètres réels plutôt que par le nombre de paramètres formels. Les paramètres formels sont des variables qui sont rouvertes dans l'espace mémoire de la fonction, mais elles ne chevauchent pas l'espace mémoire de l'objet arguments. Lorsque les arguments et les valeurs existent, les deux valeurs sont synchronisées, mais lorsque l'une d'elles n'a aucune valeur, la valeur ne sera pas synchronisée pour ce cas sans valeur.

<script>
function dynamicArgs() {
	var info = "今日签到的学生有:";
	for (let i = 0; i < arguments.length ; i ++) {
		if (i > 0) {
			info += ",";
		}
		info += arguments[i];
	}
	
	console.log(info);
}

dynamicArgs("张三", "李四");
dynamicArgs("张三", "李四", "王五", "马六");
dynamicArgs(["张三", "李四", "王五", "马六", "jack", "rose"]);
</script>
Copier après la connexion
<ul style="list-style-type: disc;"><li>

Les paramètres ne sont pas sûrs, alors ne les notez pas.

  • Vous pouvez écrire N plusieurs paramètres lors de l'appel, ou vous pouvez transmettre directement un tableau.

  • Effet d'exécution :

    Explication détaillée de la façon dont les fonctions JavaScript implémentent les paramètres variables ? (Partage du résumé)

    Résumé :

    1 Comme le montre la définition de la fonction, si des arguments de paramètres variables sont utilisés dans la fonction, il n'est pas nécessaire d'écrire des paramètres formels

    2. Lors de l'appel de la fonction, plusieurs paramètres réels peuvent être transmis directement à la fonction

    les objets arguments sont des variables locales disponibles dans toutes les fonctions (non fléchées). Vous pouvez utiliser l'objet arguments pour référencer les paramètres d'une fonction dans une fonction. Cet objet contient chaque paramètre passé à la fonction, avec le premier paramètre à l'index 0. Par exemple, si une fonction reçoit trois arguments, vous pouvez les référencer comme ceci :

    arguments[0]
    arguments[1]
    arguments[2]
    Copier après la connexion

    Les paramètres peuvent également être définis :

    arguments[0] = &#39;value&#39;;
    Copier après la connexion

    argumentsarguments 是一个对象,不是一个 Array 。它类似于Array ,但除了length属性和索引元素之外没有任何Array 属性。例如,它没有 pop 方法。但是它可以被转换为一个真正的Array

    所以经常能看到这样的代码:

    // 由于arguments不是 Array,所以无法使用 Array 的方法,所以通过这种方法转换为数组
     
    var args = [].slice.call(arguments);  // 方式一
    var args = Array.prototype.slice.call(arguments); // 方式二
     
    // 下面是 es6 提供的语法
    let args = Array.from(arguments)   // 方式一
    let args = [...arguments]; // 方式二
    Copier après la connexion

    arguments<span style="font-size: 16px;">上的属性</span>

    • arguments.callee:指向当前执行的函数(在 严格模式 下,第5版 ECMAScript (ES5) 禁止使用 a<strong>rguments.callee()</strong>
    • argunments.length:指向传递给当前函数的参数数量
    • arguments.caller:已移除

    arguments与剩余参数、默认参数和解构赋值参数的结合使用

    1)在严格模式下,剩余参数、默认参数和解构赋值参数的存在不会改变 arguments对象的行为,但是在非严格模式下就有所不同了

    function func(a) { 
      arguments[0] = 99;   // 更新了arguments[0] 同样更新了a
      console.log(a);
    }
    func(10); // 99
    
    // 并且
    
    function func(a) { 
      a = 99;              // 更新了a 同样更新了arguments[0] 
      console.log(arguments[0]);
    }
    func(10); // 99
    Copier après la connexion

    2)当非严格模式中的函数没有包含剩余参数、默认参数和解构赋值,那么arguments对象中的值跟踪参数的值(反之亦然)。看下面的代码:

    function func(a = 55) { 
      arguments[0] = 99; // updating arguments[0] does not also update a
      console.log(a);
    }
    func(10); // 10
    
    //
    
    function func(a = 55) { 
      a = 99; // updating a does not also update arguments[0]
      console.log(arguments[0]);
    }
    func(10); // 10
    
    
    function func(a = 55) { 
      console.log(arguments[0]);
    }
    func(); // undefined
    Copier après la connexion

    JS可变参数的实现二:rest 参数(...)

    在ES6标准中引入了 rest 参数(形式为…变量名 est un objet,</code > code> n'est pas un <code>Array. Il est similaire à Array, mais n'a aucune propriété Array à l'exception de l'attribut length et de l'élément index. Par exemple, il n’a pas de méthode pop. Mais il peut être converti en un véritable Array :

    Vous pouvez donc souvent voir du code comme celui-ci :

    function f(a, b, ...theArgs) {
      // ...
    }
    Copier après la connexion

    arguments

    Attributs sur <ul style="list-style-type: disc;"><li>

      arguments.callee : pointe vers la fonction en cours d'exécution (en mode strict, la version 5 d'ECMAScript (
    ES5

    ) interdit l'utilisation de a<span style="color: rgb(255, 0, 0);">rguments.callee()</span>)arguments. length : Indique le nombre d'arguments passés à la fonction actuelle

    arguments.caller : Supprimé Explication détaillée de la façon dont les fonctions JavaScript implémentent les paramètres variables ? (Partage du résumé)

    arguments combinés avec les paramètres restants, les paramètres par défaut et les paramètres d'affectation détruits

    • 1) En mode strict, restant L'existence des paramètres, des paramètres par défaut et des paramètres d'affectation détruits ne modifieront pas le comportement des objets arguments, mais il sera différent en mode non strict

      function f(arg1, ...rest, arg2) { // arg2 after ...rest ?!
        // error
      }
      Copier après la connexion
    • 2) Lorsque les fonctions sont en mode non strict
    • Non

      Contient les paramètres restants, les paramètres par défaut et les affectations détruites, puis la valeur

      dans l'objet arguments
    • suivra la valeur du paramètre (et vice versa). Regardez le code ci-dessous :
    • //以前函数
      function f(a, b) {
        var args = Array.prototype.slice.call(arguments, f.length);
       
        // …
      }
       
      // 等效于现在
       
      function f(a, b, ...args) {
        
      }
      Copier après la connexion
      Copier après la connexion

      Implémentation 2 des paramètres variables JS : paramètre rest (...)🎜
      🎜🎜Le paramètre rest a été introduit dans le standard ES6 (sous la forme de .. .nom de la variable), utilisé pour obtenir les paramètres supplémentaires de la fonction. La variable correspondant au paramètre rest est un tableau, qui place les paramètres supplémentaires dans le tableau. Très approprié pour traiter des paramètres de longueur variable. 🎜🎜Rest consiste à résoudre le problème de l'incohérence dans le nombre de paramètres transmis. Cela signifie accepter les paramètres supplémentaires et les mettre dans un tableau ; les paramètres Rest eux-mêmes sont des tableaux, et toutes les méthodes liées aux tableaux peuvent être utilisées. 🎜🎜🎜 Syntaxe d'implémentation des paramètres des variables : 🎜🎜
      function f(...[a, b, c]) {
        return a + b + c;
      }
       
      f(1)          //NaN 因为只传递一个值,其实需要三个值
      f(1, 2, 3)    // 6
      f(1, 2, 3, 4) // 6 (第四值没有与之对应的变量名)
      Copier après la connexion
      Copier après la connexion
      🎜🎜🎜theArgs commence par "...", c'est un tableau, sa valeur provient de l'appelant réel passant dans [0,theArgs.length) (Plage indexée : 0 to theArgs.length-1)🎜🎜🎜🎜🎜Remarque🎜🎜 : ​​​​Il ne peut y avoir aucun autre paramètre après le paramètre 🎜rest (c'est-à-dire qu'il ne peut s'agir que du dernier paramètre), sinon une erreur sera signalée. 🎜
      function sumAll(...args) { // args 是数组的名称
        let sum = 0;
       
        for (let arg of args) sum += arg;
       
        return sum;
      }
       
      console.log( sumAll(1) ); // 1
      console.log( sumAll(1, 2) ); // 3
      console.log( sumAll(1, 2, 3) ); // 6
      Copier après la connexion
      Copier après la connexion
      🎜🎜🎜🎜🎜 Distinguer les paramètres de repos et les objets paramètre (arguments) 🎜🎜🎜🎜🎜Les paramètres de repos ne donnent pas de nom distinct à chaque variable, l'objet paramètre contient tous les paramètres passés à la fonction 🎜🎜🎜🎜Le L'objet paramètre n'est pas un vrai tableau, le paramètre rest est une véritable instance de tableau. Par exemple, les méthodes de tri de tableau, map, forEach et pop peuvent être utilisées directement🎜🎜🎜🎜L'objet paramètre a ses propres fonctionnalités supplémentaires (telles que l'attribut d'appelé)🎜

    Rest参数的引入减少样式代码

    //以前函数
    function f(a, b) {
      var args = Array.prototype.slice.call(arguments, f.length);
     
      // …
    }
     
    // 等效于现在
     
    function f(a, b, ...args) {
      
    }
    Copier après la connexion
    Copier après la connexion

    Rest参数可以被解构(通俗一点,将rest参数的数据解析后一一对应)不要忘记参数用[] 括起来,因为它数组嘛

    function f(...[a, b, c]) {
      return a + b + c;
    }
     
    f(1)          //NaN 因为只传递一个值,其实需要三个值
    f(1, 2, 3)    // 6
    f(1, 2, 3, 4) // 6 (第四值没有与之对应的变量名)
    Copier après la connexion
    Copier après la connexion

    示例

    1、计算参数和

    function sumAll(...args) { // args 是数组的名称
      let sum = 0;
     
      for (let arg of args) sum += arg;
     
      return sum;
    }
     
    console.log( sumAll(1) ); // 1
    console.log( sumAll(1, 2) ); // 3
    console.log( sumAll(1, 2, 3) ); // 6
    Copier après la connexion
    Copier après la connexion

    Explication détaillée de la façon dont les fonctions JavaScript implémentent les paramètres variables ? (Partage du résumé)

    2、每个参数乘以2

    function multiply(multiplier, ...theArgs) {
      return theArgs.map(function(element) {
        return multiplier * element;
      });
    }
     
    var arr = multiply(2, 1, 2, 3); 
    console.log(arr); // [2, 4, 6]
    Copier après la connexion

    Explication détaillée de la façon dont les fonctions JavaScript implémentent les paramètres variables ? (Partage du résumé)

    3、排序

    function sortRestArgs(...theArgs) {
      var sortedArgs = theArgs.sort();
      return sortedArgs;
    }
    //好像一位和两位混合不能进行排序,这需要看一下为甚?主要第一个为主
    console.log(sortRestArgs(5, 3, 7, 1)); // shows 1, 3, 5, 7
    Copier après la connexion

    Explication détaillée de la façon dont les fonctions JavaScript implémentent les paramètres variables ? (Partage du résumé)

    对比:参数对象arguments不能排序

    function sortArguments() {
      //arguments是参数对象不能直接使用sort()方法,因为不是数组实例,需要转换
      var sortedArgs = arguments.sort(); 
      return sortedArgs; // this will never happen
    }
     
    // 会抛出类型异常,arguments.sort不是函数
    console.log(sortArguments(5, 3, 7, 1));
    Copier après la connexion

    Explication détaillée de la façon dont les fonctions JavaScript implémentent les paramètres variables ? (Partage du résumé)

    【相关推荐:javascript学习教程 、编程视频

    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!

    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    AI Hentai Generator

    AI Hentai Generator

    Générez AI Hentai gratuitement.

    Article chaud

    R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
    4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Meilleurs paramètres graphiques
    4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Comment réparer l'audio si vous n'entendez personne
    4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: Comment déverrouiller tout dans Myrise
    1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    Éditeur de code facile à utiliser et gratuit

    SublimeText3 version chinoise

    SublimeText3 version chinoise

    Version chinoise, très simple à utiliser

    Envoyer Studio 13.0.1

    Envoyer Studio 13.0.1

    Puissant environnement de développement intégré PHP

    Dreamweaver CS6

    Dreamweaver CS6

    Outils de développement Web visuel

    SublimeText3 version Mac

    SublimeText3 version Mac

    Logiciel d'édition de code au niveau de Dieu (SublimeText3)

    Conseils pour créer dynamiquement de nouvelles fonctions dans les fonctions Golang Conseils pour créer dynamiquement de nouvelles fonctions dans les fonctions Golang Apr 25, 2024 pm 02:39 PM

    Le langage Go propose deux technologies de création de fonctions dynamiques : la fermeture et la réflexion. les fermetures permettent d'accéder aux variables dans la portée de la fermeture, et la réflexion peut créer de nouvelles fonctions à l'aide de la fonction FuncOf. Ces technologies sont utiles pour personnaliser les routeurs HTTP, mettre en œuvre des systèmes hautement personnalisables et créer des composants enfichables.

    Considérations relatives à l'ordre des paramètres dans la dénomination des fonctions C++ Considérations relatives à l'ordre des paramètres dans la dénomination des fonctions C++ Apr 24, 2024 pm 04:21 PM

    Dans la dénomination des fonctions C++, il est crucial de prendre en compte l’ordre des paramètres pour améliorer la lisibilité, réduire les erreurs et faciliter la refactorisation. Les conventions courantes d'ordre des paramètres incluent : action-objet, objet-action, signification sémantique et conformité de la bibliothèque standard. L'ordre optimal dépend de l'objectif de la fonction, des types de paramètres, de la confusion potentielle et des conventions du langage.

    Comment écrire des fonctions efficaces et maintenables en Java ? Comment écrire des fonctions efficaces et maintenables en Java ? Apr 24, 2024 am 11:33 AM

    La clé pour écrire des fonctions Java efficaces et maintenables est la suivante : restez simple. Utilisez un nom significatif. Gérer des situations particulières. Utilisez une visibilité appropriée.

    Collection complète de formules de fonctions Excel Collection complète de formules de fonctions Excel May 07, 2024 pm 12:04 PM

    1. La fonction SOMME permet de sommer les nombres d'une colonne ou d'un groupe de cellules, par exemple : =SOMME(A1:J10). 2. La fonction MOYENNE permet de calculer la moyenne des nombres dans une colonne ou un groupe de cellules, par exemple : =AVERAGE(A1:A10). 3. Fonction COUNT, utilisée pour compter le nombre de nombres ou de texte dans une colonne ou un groupe de cellules, par exemple : =COUNT(A1:A10) 4. Fonction IF, utilisée pour effectuer des jugements logiques basés sur des conditions spécifiées et renvoyer le résultat correspondant.

    Comparaison des avantages et des inconvénients des paramètres par défaut et des paramètres variables des fonctions C++ Comparaison des avantages et des inconvénients des paramètres par défaut et des paramètres variables des fonctions C++ Apr 21, 2024 am 10:21 AM

    Les avantages des paramètres par défaut dans les fonctions C++ incluent la simplification des appels, l’amélioration de la lisibilité et l’évitement des erreurs. Les inconvénients sont une flexibilité limitée et des restrictions de dénomination. Les avantages des paramètres variadiques incluent une flexibilité illimitée et une liaison dynamique. Les inconvénients incluent une plus grande complexité, des conversions de types implicites et des difficultés de débogage.

    Quelle est la différence entre les fonctions PHP personnalisées et les fonctions prédéfinies ? Quelle est la différence entre les fonctions PHP personnalisées et les fonctions prédéfinies ? Apr 22, 2024 pm 02:21 PM

    La différence entre les fonctions PHP personnalisées et les fonctions prédéfinies est la suivante : Portée : les fonctions personnalisées sont limitées à la portée de leur définition, tandis que les fonctions prédéfinies sont accessibles tout au long du script. Comment définir : les fonctions personnalisées sont définies à l'aide du mot-clé function, tandis que les fonctions prédéfinies sont définies par le noyau PHP. Passage de paramètres : les fonctions personnalisées reçoivent des paramètres, tandis que les fonctions prédéfinies peuvent ne pas nécessiter de paramètres. Extensibilité : des fonctions personnalisées peuvent être créées selon les besoins, tandis que les fonctions prédéfinies sont intégrées et ne peuvent pas être modifiées.

    Exception de fonction C++ avancée : gestion personnalisée des erreurs Exception de fonction C++ avancée : gestion personnalisée des erreurs May 01, 2024 pm 06:39 PM

    La gestion des exceptions en C++ peut être améliorée grâce à des classes d'exceptions personnalisées qui fournissent des messages d'erreur spécifiques, des informations contextuelles et effectuent des actions personnalisées en fonction du type d'erreur. Définissez une classe d'exception héritée de std::exception pour fournir des informations d'erreur spécifiques. Utilisez le mot-clé throw pour lancer une exception personnalisée. Utilisez Dynamic_cast dans un bloc try-catch pour convertir l'exception interceptée en un type d'exception personnalisé. Dans le cas réel, la fonction open_file lève une exception FileNotFoundException. La capture et la gestion de l'exception peuvent fournir un message d'erreur plus spécifique.

    Les paramètres variables Golang peuvent-ils être utilisés dans des fonctions génériques ? Les paramètres variables Golang peuvent-ils être utilisés dans des fonctions génériques ? Apr 29, 2024 pm 02:06 PM

    Dans Go, les paramètres variadiques peuvent être utilisés pour des fonctions génériques, permettant la création de fonctions génériques acceptant un nombre variable de paramètres et adaptées à plusieurs types. Par exemple, vous pouvez créer une fonction générique Mode qui recherche l'élément le plus fréquent dans une liste donnée : Mode accepte un nombre variable d'éléments de type T. Il compte les éléments en créant des comptes pour chaque élément. Ensuite, il trouve l'élément qui apparaît le plus et le renvoie en mode. Dans la fonction principale, vous pouvez appeler la fonction Mode pour la liste de chaînes et la liste d'entiers, qui renverront respectivement la chaîne et le nombre avec le plus d'occurrences.

    See all articles