Maison > interface Web > js tutoriel > Analyse détaillée des fonctions et des fonctions fléchées ES6 en js

Analyse détaillée des fonctions et des fonctions fléchées ES6 en js

不言
Libérer: 2018-09-01 11:25:40
original
1775 Les gens l'ont consulté

Cet article vous apporte une analyse détaillée des fonctions et des fonctions fléchées ES6 en js. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Introduction

Tout en JavaScript se passe dans les fonctions.

Une fonction est un bloc de code qui peut être défini une fois et exécuté à tout moment.

La fonction peut éventuellement accepter des paramètres et renvoyer une valeur.

Une fonction en JavaScript est un objet, un type particulier d'objet : l'objet fonction.

De plus, les fonctions sont appelées fonctions de première classe car elles peuvent être affectées à une valeur, elles peuvent être passées comme arguments et utilisées comme valeurs de retour.

Syntaxe

Commençons par « l’ancienne » syntaxe pré-ES6/ES2015. Il s'agit d'une déclaration de fonction :

function dosomething(foo) {
  // do something
}
Copier après la connexion

(Maintenant, dans le monde ES6/ES2015, cela s'appelle une fonction régulière)

Des fonctions peuvent être affectées à des variables (c'est ce qu'on appelle une fonction expression) :

const dosomething = function(foo) {
  // do something
}
Copier après la connexion

L'expression de fonction nommée est similaire, mais fonctionne mieux dans les traces d'appel de pile, ce qui est utile lorsqu'une erreur se produit - elle enregistre le nom de la fonction :

const dosomething = function dosomething(foo) {
  // do something
}
Copier après la connexion

ES6 / ES2015 a introduit les fonctions fléchées, qui sont particulièrement adaptées à une utilisation comme paramètres ou fonctions de rappel lors de l'utilisation de fonctions en ligne :

const dosomething = foo => {
  //do something
}
Copier après la connexion

Les fonctions fléchées sont très différentes des autres définitions de fonctions ci-dessus, que nous aborderons plus tard. expliquer.

Paramètres

Une fonction peut avoir un ou plusieurs paramètres.

const dosomething = () => {
  //do something
}

const dosomethingElse = foo => {
  //do something
}

const dosomethingElseAgain = (foo, bar) => {
  //do something
}
Copier après la connexion

À partir de ES6/ES2015, les fonctions peuvent avoir des valeurs par défaut pour les paramètres :

const dosomething = (foo = 1, bar = 'hey') => {
  //do something
}
Copier après la connexion

Cela vous permet d'appeler une fonction sans remplir tous les paramètres :

dosomething(3)
dosomething()
Copier après la connexion

ES2018 a introduit des virgules de fin pour les paramètres. Cette fonctionnalité permet de réduire les erreurs causées par des virgules manquantes lors du déplacement des paramètres (par exemple, déplacer la dernière au milieu) :

const dosomething = (foo = 1, bar = 'hey') => {
  //do something
}

dosomething(2, 'ho!')
Copier après la connexion

Vous pouvez envelopper. tous les paramètres d'un tableau et utilisez l'opérateur spread lors de l'appel de la fonction :

const dosomething = (foo = 1, bar = 'hey') => {
  //do something
}
const args = [2, 'ho!']
dosomething(...args)
Copier après la connexion

Lorsque vous travaillez avec de nombreux paramètres, il peut être difficile de les mémoriser. Les objets peuvent être utilisés ici, et la déstructuration préserve les noms des paramètres :

const dosomething = ({ foo = 1, bar = 'hey' }) => {
  //do something
  console.log(foo) // 2
  console.log(bar) // 'ho!'
}
const args = { foo: 2, bar: 'ho!' }
dosomething(args)
Copier après la connexion

Valeur de retour

Chaque fonction renvoie une valeur, qui est "indéfinie" par défaut.

Analyse détaillée des fonctions et des fonctions fléchées ES6 en js

Toute fonction se termine à la fin de sa ligne de code, ou lorsque le flux d'exécution trouve le mot-clé return.

Lorsque JavaScript rencontre ce mot-clé, il quitte l'exécution de la fonction et rend le contrôle à son appelant.

Si vous transmettez une valeur, cette valeur sera renvoyée comme résultat de la fonction :

const dosomething = () => {
  return 'test'
}
const result = dosomething() // result === 'test'
Copier après la connexion

Vous ne pouvez renvoyer qu'une valeur.

Pour _simuler_ le renvoi de plusieurs valeurs, vous pouvez renvoyer un objet littéral ou un tableau et utiliser la fonction d'affectation de déstructuration lorsqu'elle est appelée.

Utiliser un tableau :

Analyse détaillée des fonctions et des fonctions fléchées ES6 en js

Utiliser un objet :

Analyse détaillée des fonctions et des fonctions fléchées ES6 en js

Fonctions imbriquées

Vous pouvez définir des fonctions dans d'autres fonctions :

const dosomething = () => {
  const dosomethingelse = () => {}
  dosomethingelse()
  return 'test'
}
Copier après la connexion
La portée d'une fonction imbriquée est une fonction externe et ne peut pas être appelée de l'extérieur.

Méthode objet

Lorsqu'elle est utilisée comme propriété d'objet, une fonction est appelée une méthode :

const car = {
  brand: 'Ford',
  model: 'Fiesta',
  start: function() {
    console.log(Started)
  }
}

car.start()
Copier après la connexion

ceci dans une fonction flèche

Lorsqu'un La fonction flèche est utilisée avec les fonctions régulières qui ont un comportement important lorsqu'elles sont utilisées comme méthodes objet. Prenons cet exemple :

const car = {
  brand: 'Ford',
  model: 'Fiesta',
  start: function() {
    console.log(Started ${this.brand} ${this.model})
  },
  stop: () => {
    console.log(Stopped ${this.brand} ${this.model})
  }
}
Copier après la connexion

La méthode stop() ne fonctionne pas comme prévu.

Analyse détaillée des fonctions et des fonctions fléchées ES6 en js

Cela est dû au fait que le traitement de ceci est différent dans les deux styles de déclaration de fonction. Ceci dans les fonctions fléchées fait référence au contexte de fonction englobant, dans ce cas l'objet fenêtre

Analyse détaillée des fonctions et des fonctions fléchées ES6 en js

ceci, utilisez function() pour faire référence à l'objet hôte

Cela signifie que les fonctions fléchées ne conviennent pas à une utilisation avec les méthodes d'objet et les constructeurs (les constructeurs de fonctions fléchées augmenteront en faitTypeError lorsqu'ils sont appelés).

IIFE, invoque immédiatement l'expression de fonction

IIFE est une fonction qui est exécutée immédiatement après la déclaration :

;(function dosomething() {
  console.log('executed')
})()
Copier après la connexion

Vous pouvez affecter le résultat à une variable :

const something = (function dosomething() {
  return 'something'
})()
Copier après la connexion

Ils sont très pratiques car vous n'avez pas besoin d'appeler la fonction séparément après l'avoir définie.

Montages de fonctions

Le JavaScript avant d'exécuter le code le réorganisera selon certaines règles.

déplacera la fonction vers le haut de sa portée. C'est pourquoi l'exemple suivant ne génère pas d'erreur ;

dosomething()
function dosomething() {
  console.log('did something')
}
Copier après la connexion

Analyse détaillée des fonctions et des fonctions fléchées ES6 en js

En interne, JavaScript déplace la fonction avant de l'appeler, ainsi que de trouver dans le même périmètre Toutes les autres fonctions de :

function dosomething() {
  console.log('did something')
}
dosomething()
Copier après la connexion

现在,如果你使用命名函数表达式,因为你正在使用变量,会发生不同的事情。变量声明被提升,但不是值,因此不是函数。

dosomething()
const dosomething = function dosomething() {
  console.log('did something')
}
Copier après la connexion

不会工作:

Analyse détaillée des fonctions et des fonctions fléchées ES6 en js

这是因为内部发生的事情是:

const dosomething
dosomething()
dosomething = function dosomething() {
  console.log('did something')
}
Copier après la connexion

“let”声明也是如此。var声明也不起作用,但是报的不是同样的错误:

Analyse détaillée des fonctions et des fonctions fléchées ES6 en js

这是因为var声明被提升并用undefined作为值初始化,而constlet被提升但未初始化。

相关推荐:

JavaScript箭头arrow函数详解

解析ReactJs中箭头函数的使用

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal