Maison interface Web js tutoriel Javascript est votre fonction d'ordre supérieur (application avancée)_compétences Javascript

Javascript est votre fonction d'ordre supérieur (application avancée)_compétences Javascript

May 16, 2016 pm 03:54 PM
高阶函数

Dans les langages de programmation habituels, les paramètres d'une fonction ne peuvent être que des types de base ou des références d'objet, et la valeur de retour ne peut être que des types de données de base ou des références d'objet. Mais en Javascript, les fonctions sont des citoyens de première classe et peuvent être transmises en tant que paramètres ou renvoyées en tant que valeurs de retour. La fonction dite d'ordre supérieur est une fonction qui peut prendre une fonction comme paramètre ou une fonction comme valeur de retour. Ces deux situations ont de nombreux scénarios d'application dans le développement réel. Cet article est un résumé de plusieurs scénarios d'application que j'ai rencontrés au cours de mon travail et de mes études.

Fonction de rappel

La réutilisation du code est l'un des critères importants pour mesurer une application. En extrayant la logique métier modifiée et en l'encapsulant dans la fonction de rappel, le taux de réutilisation du code peut être efficacement amélioré. Par exemple, la méthode forEach ajoutée aux tableaux dans ES5 parcourt le tableau et appelle la même fonction sur chaque élément.

array = {};
array.forEach = function(arr, fn){
  for (var i = 0, len = arr.length; i < len; i++) {
    fn(arr[i], i, arr);
  }
}
Copier après la connexion

Concentrez l'activité sur la fonction de rappel sans avoir à réécrire le code de traversée à chaque fois.

 Fonction partielle

En tant qu'application typique de sortie d'une fonction comme valeur de retour, il s'agit d'une fonction partielle. La fonction dite partielle fait référence à l'utilisation de la création d'une fonction qui appelle une autre partie, une fonction dont les paramètres ou les variables ont été prédéfinis. Quoi qu’il en soit, en regardant la définition, je ne comprends pas à quoi sert ce truc. Examinons d'abord des exemples. L'exemple le plus typique de fonctions partielles est le jugement de type.

Les objets Javascript ont trois attributs : les attributs de prototype, les attributs de classe et l'extensibilité. (Les étudiants qui ne savent pas devraient retourner lire le livre Rhino, page : 138) L'attribut class est une chaîne, qui n'est pas directement fournie en Javascript, mais nous pouvons utiliser Object.prototype.toString pour l'obtenir indirectement. Cette fonction renvoie toujours la forme suivante :

[Classe d'objet] 

Nous pouvons donc écrire une série de fonctions isType.

Le code est le suivant :

isString = function(obj){
  return Object.prototype.toString.call(obj) === "[object String]";
}
isNumber = function(obj){
  return Object.prototype.toString.call(obj) === "[object Number]";
}
isArray = function(obj){
  return Object.prototype.toString.call(obj) === "[object Array]";
}
Copier après la connexion

La plupart des codes de ces fonctions sont répétés à l'heure actuelle, les fonctions d'ordre élevé font un début magnifique :

isType = function(type) {
  return function(obj) {
    return Object.prototype.toString.call(obj) === "[object " + type + "]";
  }
}

isString = isType('String');
isNumber = isType('Number');
isArray = isType('Array');
Copier après la connexion

Ainsi, la forme de renvoi d'une nouvelle fonction personnalisée en spécifiant certains paramètres est une fonction partielle.

Curry

Le currying est aussi appelé évaluation partielle. Une fonction de currying acceptera d'abord certains paramètres.Après avoir accepté ces paramètres, la fonction ne sera pas évaluée immédiatement, mais continuera à renvoyer une autre fonction. Les paramètres qui viennent d'être transmis sont enregistrés dans la fermeture formée par la fonction. Lorsque la fonction est réellement évaluée, tous les paramètres transmis seront utilisés pour l'évaluation en même temps.

var currying = function(fn) {
  var args = [];
  
  return function() {
    if (arguments.length === 0) {
      return fn.applay(this, args);
    } else {
      args = args.concat(arguments);
      return arguments.callee;
    }
  }
}
Copier après la connexion

Supposons que nous prenions comme exemple le calcul des dépenses quotidiennes d'un mois :

var currying = function(fn) {
debugger;
  var args = [];
  
  return function() {
    if (arguments.length === 0) {
      return fn.apply(this, args);
    } else {
      Array.prototype.push.apply(args, arguments);
      return arguments.callee;
    }
  }
}

cost = function(){
  var sum = 0;
  for (var i = 0, len = arguments.length; i < len; i++) {
    sum += arguments[i];
  }
  
  return sum;
}
var cost = currying(cost);

cost(100);
cost(200);
alert(cost())
Copier après la connexion

Limitation des événements

Dans certains scénarios, certains événements peuvent être déclenchés à plusieurs reprises, mais la fonction de traitement des événements n'a pas besoin d'être exécutée à chaque fois. Par exemple, des calculs logiques complexes sont effectués dans l'événement window.resize. Si l'utilisateur modifie fréquemment la taille du navigateur, les calculs complexes auront un impact sérieux sur les performances. Parfois, ces calculs logiques n'ont pas besoin d'être déclenchés à chaque fois. seuls des calculs limités sont nécessaires. Pour le moment, nous devons ignorer certaines demandes d'événements en fonction de la période. Jetez un œil à la fonction de limitation suivante :

function throttle(fn, interval) {
   var doing = false;

   return function() {
    if (doing) {
     return;
    }
    doing = true;
    fn.apply(this, arguments);
    setTimeout(function() {
     doing = false;
    }, interval);
   }
  }
  
  window.onresize = throttle(function(){
    console.log('execute');
  }, 500);
Copier après la connexion

En contrôlant le temps d'exécution des fonctions, vous pouvez atteindre un équilibre parfait entre le nombre d'exécutions de fonctions et les exigences fonctionnelles. Un autre événement est mousemove. Si nous lions cet événement à un élément DOM, l'événement sera déclenché à plusieurs reprises lorsque la souris passera sur l'élément.

L'événement est terminé

Pour certains événements qui peuvent être déclenchés fréquemment, nous souhaitons parfois effectuer une série d'opérations après la fin de l'événement. À ce stade, nous pouvons utiliser des fonctions d'ordre supérieur pour effectuer le traitement suivant :

function debounce(fn, interval) {
  var timer = null;

 function delay() {
  var target = this;
  var args = arguments;
  return setTimeout(function(){
   fn.apply(target, args);
  }, interval);
 }

 return function() {
  if (timer) {
   clearTimeout(timer);
  }

  timer = delay.apply(this, arguments);
 }
};
window.onresize = throttle(function(){
  console.log('resize end');
}, 500);
Copier après la connexion

Si l'événement est déclenché au cours de ce processus, effacez le dernier handle d'événement et reliez l'heure d'exécution.

Référence :

《Explication détaillée du nœud》

"Modèles de conception Javascript et pratiques de développement"

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)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

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)

Comment faire de la programmation fonctionnelle avec PHP Comment faire de la programmation fonctionnelle avec PHP Jun 06, 2023 am 08:21 AM

PHP est un langage côté serveur largement utilisé. L'une des raisons pour lesquelles de nombreux développeurs Web aiment utiliser PHP est sa riche bibliothèque de fonctions et sa syntaxe de fonctions simple et facile à utiliser. La programmation fonctionnelle est un paradigme de programmation qui encapsule bien les données et le comportement, rendant le code plus modulaire et plus facile à maintenir et à tester. Dans cet article, nous présenterons comment utiliser PHP pour la programmation fonctionnelle. Bases de la programmation fonctionnelle L'idée centrale de la programmation fonctionnelle est de traiter les fonctions comme des citoyens de première classe. Les fonctions elles-mêmes peuvent être transmises, renvoyées et composées comme des variables.

Comment créer des fonctions d'ordre supérieur en Python ? Comment créer des fonctions d'ordre supérieur en Python ? Sep 05, 2023 pm 07:29 PM

En Python, une fonction qui prend une autre fonction comme argument ou renvoie une fonction en sortie est appelée fonction d'ordre supérieur. Voyons ses fonctionnalités - la fonction peut être stockée dans une variable. Cette fonction peut être passée en paramètre à une autre fonction. Les fonctions d'ordre supérieur peuvent être stockées sous forme de listes, de tables de hachage, etc. Les fonctions peuvent être renvoyées à partir de fonctions. Regardons quelques exemples - Fonctions en tant qu'objets La traduction chinoise de l'exemple est : Exemple Dans cet exemple, ces fonctions sont traitées comme des objets. Ici, la fonction demo() est affectée à une variable - #Creatingafunctiondefdemo(mystr):returnmystr.swapcase()#swappingthecase

Quelles sont les fonctions d'ordre supérieur en Python ? Quelles sont les fonctions d'ordre supérieur en Python ? Nov 10, 2023 pm 04:42 PM

Les fonctions d'ordre élevé incluent map(), filter(), réduire(), la fonction lambda, partial(), etc. Introduction détaillée : 1. map() : Cette fonction intégrée accepte une fonction et un ou plusieurs objets itérables en entrée, puis renvoie un itérateur qui applique la fonction d'entrée à chaque élément de l'objet itérable 2. filter() : Cette fonction intégrée prend une fonction et un objet itérable en entrée et renvoie un itérateur qui produit les éléments qui font que la fonction d'entrée renvoie True, etc.

Fonctions fléchées PHP : comment gérer les appels imbriqués vers des fonctions d'ordre supérieur Fonctions fléchées PHP : comment gérer les appels imbriqués vers des fonctions d'ordre supérieur Sep 13, 2023 am 08:27 AM

Fonction flèche PHP : Comment gérer les appels imbriqués de fonctions d'ordre supérieur, des exemples de code spécifiques sont nécessaires Introduction : Dans la version 7.4 de PHP, le concept de fonctions fléchées (fonctions fléchées) a été introduit. être traités avec élégance. Les appels imbriqués vers des fonctions d’ordre supérieur. Cet article présentera l'utilisation de base des fonctions fléchées et démontrera comment gérer les appels imbriqués de fonctions d'ordre supérieur à travers des exemples de code spécifiques. 1. Qu'est-ce qu'une fonction fléchée ? La fonction flèche est une nouvelle fonctionnalité introduite dans la version PHP7.4.

Fonctions d'ordre supérieur en Python Fonctions d'ordre supérieur en Python Sep 13, 2023 pm 06:53 PM

Introduction au monde des fonctions d'ordre supérieur en Python Si vous souhaitez améliorer vos compétences en programmation Python et générer un code plus expressif et efficace, vous êtes au bon endroit. Les fonctions en Python sont plus que de simples blocs de code spécialisés. Ce sont également des éléments puissants qui peuvent être déplacés, transférés et même générés dynamiquement. Les fonctions d'ordre supérieur améliorent cette polyvalence en traitant d'autres fonctions. Cet article abordera en détail les principes des fonctions d'ordre supérieur. Nous explorerons les bases des processus en tant qu'objets de première classe, plongerons dans des exemples concrets de fonctions d'ordre supérieur et encouragerons la puissance des fonctions lambda pour un code clair et beau. Le modèle de programmation fonctionnelle et ses avantages lorsqu'il est utilisé en Python seront également abordés. Après avoir lu cet article, vous aurez une bonne compréhension des fonctions d'ordre supérieur et saurez

Analyse de scénarios d'application de fonctions d'ordre élevé dans Golang Analyse de scénarios d'application de fonctions d'ordre élevé dans Golang May 17, 2023 pm 05:40 PM

Avec la popularité et le développement du langage Golang, de plus en plus de développeurs commencent à essayer d'utiliser des idées de programmation fonctionnelle. Les fonctions d'ordre supérieur dans Golang apportent une grande commodité à la programmation fonctionnelle et sont largement utilisées dans le développement réel. Alors, quels sont les scénarios d’application des fonctions d’ordre élevé dans Golang ? Ensuite, nous analyserons cela. Traitement des paramètres de fonction et des valeurs de retour Dans Golang, les fonctions peuvent être utilisées comme paramètres d'autres fonctions ou fonctions de retour. Cela signifie que nous pouvons passer une fonction en paramètre à une autre

Comment comprendre les fonctions d'ordre supérieur des types de fonctions dans Golang ? Comment comprendre les fonctions d'ordre supérieur des types de fonctions dans Golang ? Apr 20, 2024 am 11:54 AM

Les fonctions d'ordre supérieur de Golang acceptent et renvoient des fonctions. Ils se répartissent en deux catégories : recevoir des fonctions en paramètres : traiter d'autres fonctions ou exécuter des programmes dynamiques. Fonctions de retour sous forme de valeurs de retour : créez et renvoyez des fonctions qui peuvent être stockées et exécutées ultérieurement.

Un article pour vous aider à comprendre les fonctions d'ordre supérieur de Python Un article pour vous aider à comprendre les fonctions d'ordre supérieur de Python Jul 25, 2023 pm 04:07 PM

La fonction d'ordre supérieur est une fonction fonctionnelle très utile en Python. La fonction dite d'ordre supérieur est une fonction qui peut être utilisée pour recevoir une autre fonction en tant que paramètre.

See all articles