Maison interface Web Questions et réponses frontales À quoi devez-vous faire attention lorsque vous utilisez les fonctions fléchées es6 ?

À quoi devez-vous faire attention lorsque vous utilisez les fonctions fléchées es6 ?

Mar 23, 2022 pm 01:04 PM
es6 箭头函数

Remarques : 1. La fonction flèche modifiera le point de this dans la fonction pour être cohérent avec le point de this dans la portée de niveau supérieur ; 2. Elle ne peut pas être utilisée comme constructeur, c'est-à-dire que la nouvelle commande ne peut pas être utilisé ; 3. L'objet arguments ne peut pas être utilisé ;4. La commande rendement ne peut pas être utilisée et ne peut pas être utilisée comme fonction de générateur.

À quoi devez-vous faire attention lorsque vous utilisez les fonctions fléchées es6 ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, ECMAScript version 6, ordinateur Dell G3.

Dans la nouvelle syntaxe d'es6, des fonctions fléchées apparaissent.

ES6 permet l'utilisation de "flèches" (=>) pour définir des fonctions.

		function fun(a){ return a; }
// ↓ 去掉 function 在 ( ) 和 { } 之间添加 => 
		var fun = (a) => { return a; }  
// ↓ 如果只有一个形参可省略 ( ) 如果一个形参都没有,必须加( )         
		var fun = a => { return a; }  
// ↓ 如果函数体只有一句话,可省略{ },如果仅有的这句话还是 return, 则必须省略 return         
		var fun = a => a
Copier après la connexion

Notes sur les fonctions fléchées dans ES6

(1) La fonction flèche modifiera le pointage de this dans la fonction pour être cohérent avec le pointage de this dans la portée supérieure

L'objet this dans le corps de la fonction est l'objet où il est défini plutôt que l'objet dans lequel il est utilisé.

(2) ne peut pas être utilisé comme constructeur, c'est-à-dire que la nouvelle commande ne peut pas être utilisée, sinon une erreur sera générée.

(3) L'objet arguments ne peut pas être utilisé, car l'objet n'existe pas dans le corps de la fonction. Si vous souhaitez l'utiliser, vous pouvez utiliser le paramètre rest à la place.

(4) La commande rendement ne peut pas être utilisée, donc les fonctions fléchées ne peuvent pas être utilisées comme fonctions générateur.

Parmi les quatre points ci-dessus, le premier point est particulièrement remarquable. Le pointeur de cet objet est variable, mais dans une fonction flèche, il est fixe.

function foo() {
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}

var id = 21;

foo.call({ id: 42 });
// id: 42
Copier après la connexion

Dans le code ci-dessus, le paramètre de setTimeout est une fonction flèche. La définition de cette fonction flèche prend effet lorsque la fonction foo est générée, et son exécution réelle n'attendra que 100 millisecondes plus tard. S'il s'agit d'une fonction normale, elle devrait pointer vers la fenêtre de l'objet global lors de son exécution, et 21 devrait être affiché à ce moment-là. Cependant, la fonction flèche fait que cela pointe toujours vers l'objet où la définition de la fonction prend effet (dans ce cas, {id : 42}), donc la sortie est 42.
La fonction de flèche permet à cela dans setTimeout d'être lié à la portée où il est défini, plutôt que de pointer vers la portée où il est exécuté. Voici un autre exemple.

function Timer() {
  this.s1 = 0;
  this.s2 = 0;
  // 箭头函数
  setInterval(() => this.s1++, 1000);
  // 普通函数
  setInterval(function () {
    this.s2++;
  }, 1000);
}

var timer = new Timer();

setTimeout(() => console.log('s1: ', timer.s1), 3100);
setTimeout(() => console.log('s2: ', timer.s2), 3100);
// s1: 3
// s2: 0
Copier après la connexion

Dans le code ci-dessus, deux minuteries sont configurées à l'intérieur de la fonction Timer, en utilisant respectivement les fonctions fléchées et les fonctions ordinaires. Le this du premier est lié à la portée où il est défini (c'est-à-dire la fonction Timer), et le this du second pointe vers la portée où se trouve le runtime (c'est-à-dire l'objet global). Ainsi, après 3 100 millisecondes, timer.s1 a été mis à jour trois fois, mais timer.s2 n'a pas été mis à jour une seule fois.

La fonction flèche peut corriger ce point. Cette fonctionnalité est très utile pour encapsuler les fonctions de rappel. Vous trouverez ci-dessous un exemple où la fonction de rappel d'un événement DOM est encapsulée dans un objet.

var handler = {
  id: '123456',

  init: function() {
    document.addEventListener('click',
      event => this.doSomething(event.type), false);
  },

  doSomething: function(type) {
    console.log('Handling ' + type  + ' for ' + this.id);
  }
};
Copier après la connexion

Dans la méthode init du code ci-dessus, une fonction de flèche est utilisée, ce qui fait que celle-ci dans la fonction de flèche pointe toujours vers l'objet gestionnaire. Sinon, lorsque la fonction de rappel s'exécute, la ligne this.doSomething signalera une erreur, car elle pointe vers l'objet document à ce moment-là.

La fixation de ce pointage n'est pas due au fait qu'il existe un mécanisme pour le lier à l'intérieur de la fonction flèche. La vraie raison est que la fonction flèche n'a pas du tout son propre ceci, ce qui fait que le ceci interne est le ceci de l'extérieur. bloc de code. C’est précisément parce qu’il ne possède pas cela qu’il ne peut pas être utilisé comme constructeur.

Donc, le code pour convertir la fonction flèche en ES5 est le suivant.

// ES6
function foo() {
  setTimeout(() => {
    console.log('id:', this.id);
  }, 100);
}

// ES5
function foo() {
  var _this = this;

  setTimeout(function () {
    console.log('id:', _this.id);
  }, 100);
}
Copier après la connexion

Dans le code ci-dessus, la version ES5 convertie montre clairement que la fonction flèche n'a pas du tout son propre this, mais fait référence au this externe.

【Recommandations associées : tutoriel vidéo javascript, front-end web

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)
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 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines 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)

Comment inverser un tableau dans ES6 Comment inverser un tableau dans ES6 Oct 26, 2022 pm 06:19 PM

Dans ES6, vous pouvez utiliser la méthode reverse() de l'objet tableau pour inverser le tableau. Cette méthode est utilisée pour inverser l'ordre des éléments du tableau, en plaçant le dernier élément en premier et le premier élément en dernier. .inverse()". La méthode reverse() modifiera le tableau d'origine. Si vous ne souhaitez pas le modifier, vous devez l'utiliser avec l'opérateur d'expansion "...", et la syntaxe est "[...array].reverse(). ".

L'async est-il pour es6 ou es7 ? L'async est-il pour es6 ou es7 ? Jan 29, 2023 pm 05:36 PM

async est es7. async et wait sont de nouveaux ajouts à ES7 et sont des solutions pour les opérations asynchrones ; async/await peut être considéré comme un sucre syntaxique pour les modules co et les fonctions de générateur, résolvant le code asynchrone js avec une sémantique plus claire. Comme son nom l'indique, async signifie « asynchrone ». Async est utilisé pour déclarer qu'une fonction est asynchrone ; il existe une règle stricte entre async et wait. Les deux sont inséparables l'un de l'autre et wait ne peut être écrit que dans des fonctions asynchrones.

Comment utiliser les fonctions fléchées PHP pour implémenter le currying des fonctions Comment utiliser les fonctions fléchées PHP pour implémenter le currying des fonctions Sep 13, 2023 am 11:12 AM

Comment utiliser les fonctions fléchées PHP pour implémenter le currying de fonctions Le currying (Currying) est un concept de programmation fonctionnelle, qui fait référence au processus de conversion d'une fonction multi-paramètres en une séquence de fonctions qui n'accepte qu'un seul paramètre. En PHP, nous pouvons utiliser des fonctions fléchées pour implémenter le currying des fonctions, rendant le code plus concis et flexible. La fonction dite flèche est une nouvelle syntaxe de fonction anonyme introduite dans PHP7.4. Sa caractéristique est qu'il peut capturer des variables externes et n'a qu'une seule expression comme corps de fonction.

Comment trouver différents éléments dans deux tableaux dans Es6 Comment trouver différents éléments dans deux tableaux dans Es6 Nov 01, 2022 pm 06:07 PM

Étapes : 1. Convertissez respectivement les deux tableaux en types d'ensemble, avec la syntaxe "newA=new Set(a); newB=new Set(b);" 2. Utilisez has() et filter() pour trouver l'ensemble de différences. , avec la syntaxe " new Set([...newA].filter(x =>!newB.has(x)))", les éléments de l'ensemble de différences seront inclus dans une collection d'ensembles et renvoyés 3. Utilisez Array. from pour convertir l'ensemble en tableau Tapez, syntaxe "Array.from(collection)".

Pourquoi le mini-programme doit-il convertir es6 en es5 ? Pourquoi le mini-programme doit-il convertir es6 en es5 ? Nov 21, 2022 pm 06:15 PM

Pour la compatibilité du navigateur. En tant que nouvelle spécification pour JS, ES6 ajoute de nombreuses nouvelles syntaxes et API. Cependant, les navigateurs modernes ne prennent pas en charge les nouvelles fonctionnalités d'ES6, le code ES6 doit donc être converti en code ES5. Dans les outils de développement Web WeChat, babel est utilisé par défaut pour convertir le code de syntaxe ES6 du développeur en code ES5 bien pris en charge par les trois terminaux, aidant les développeurs à résoudre les problèmes de développement causés par différents environnements uniquement dans le projet. Il suffit de configurer et de vérifier le ; Option "ES6 à ES5".

Comment implémenter la déduplication de tableau dans es5 et es6 Comment implémenter la déduplication de tableau dans es5 et es6 Jan 16, 2023 pm 05:09 PM

Dans es5, vous pouvez utiliser l'instruction for et la fonction indexOf() pour réaliser la déduplication de tableau. La syntaxe "for(i=0;i<array length;i++){a=newArr.indexOf(arr[i]);if( a== -1){...}}". Dans es6, vous pouvez utiliser l'opérateur spread, Array.from() et Set pour supprimer la duplication ; vous devez d'abord convertir le tableau en un objet Set pour supprimer la duplication, puis utiliser l'opérateur spread ou la fonction Array.from(). pour reconvertir l'objet Set en un groupe Just.

Que signifie la zone morte temporaire es6 ? Que signifie la zone morte temporaire es6 ? Jan 03, 2023 pm 03:56 PM

Dans es6, la zone morte temporaire est une erreur de syntaxe, qui fait référence aux commandes let et const qui font que le bloc forme une portée fermée. Dans un bloc de code, avant qu'une variable ne soit déclarée à l'aide de la commande let/const, la variable est indisponible et appartient à la « zone morte » de la variable avant que la variable ne soit déclarée ; c'est ce qu'on appelle syntaxiquement une « zone morte temporaire ». ES6 stipule que la promotion des variables ne se produit pas dans les zones mortes temporaires et dans les instructions let et const, principalement pour réduire les erreurs d'exécution et empêcher l'utilisation de la variable avant qu'elle ne soit déclarée, ce qui peut entraîner un comportement inattendu.

La carte es6 est-elle commandée ? La carte es6 est-elle commandée ? Nov 03, 2022 pm 07:05 PM

La carte est ordonnée. Le type de carte dans ES6 est une liste ordonnée qui stocke de nombreuses paires clé-valeur. Les noms de clés et les valeurs correspondantes prennent en charge tous les types de données ; l'équivalence des noms de clés est jugée en appelant la méthode "Objext.is()". , donc le chiffre 5 et la chaîne "5" seront jugés comme deux types et pourront apparaître dans le programme comme deux clés indépendantes.

See all articles