Middle
Parlez du contexte des fonctions en JavaScript.
sobes.tech IA
Réponse de l'IA
Le contexte d'exécution d'une fonction (this) en JavaScript détermine comment la fonction est appelée et quelles valeurs sont accessibles à l'intérieur. Le contexte change dynamiquement en fonction de la façon dont la fonction est appelée :
- Contexte global : Hors des fonctions,
thisfait référence à l'objet global (windowdans le navigateur,globaldans Node.js).// Dans le navigateur console.log(this === window); // true // Dans Node.js console.log(this === global); // true - Contexte de fonction :
- Appel standard : En mode non strict,
thisà l'intérieur d'une fonction fait référence à l'objet global (si la fonction n'est pas un méthode d'un objet). En mode strict ("use strict";),thisseraundefined.function showThis() { console.log(this); } showThis(); // En mode non strict : Objet global ; En mode strict : undefined - Appel en tant que méthode d'un objet :
thisfait référence à l'objet auquel appartient la méthode.const user = { name: 'Alice', greet: function() { console.log("Bonjour, je m'appelle " + this.name); } }; user.greet(); // Bonjour, je m'appelle Alice - Avec
new(constructeur) : Crée un nouvel objet, qui devient la valeur dethisà l'intérieur de la fonction constructeur, et retourne cet objet.function Person(name) { this.name = name; } const person1 = new Person('Bob'); console.log(person1.name); // Bob - Indication explicite du contexte (
call,apply,bind) :call(thisArg, arg1, arg2, ...): Appelle la fonction avec lethisspécifié et les arguments listés séparément.apply(thisArg, [argsArray]): Appelle la fonction avec lethisspécifié et les arguments sous forme de tableau.bind(thisArg, arg1, arg2, ...): Retourne une nouvelle fonction avecthislié de façon permanente àthisArget avec des arguments liés.
function introduce(greeting, punctuation) { console.log(greeting + ", je suis " + this.name + punctuation); } const person = { name: 'Charlie' }; introduce.call(person, "Salut", "!"); // Salut, je suis Charlie! introduce.apply(person, ["Bonjour", "."]); // Bonjour, je suis Charlie. const boundIntroduce = introduce.bind(person, "Hé"); boundIntroduce("?"); // Hé, je suis Charlie?
- Appel standard : En mode non strict,
- Fonctions fléchées : N'ont pas leur propre contexte
this. Elles capturentthisdu contexte lexical dans lequel elles ont été définies.const obj = { name: 'David', sayLater: function() { // `this` ici fait référence à `obj` setTimeout(() => { // `this` ici fait également référence à `obj` (hérité de `sayLater`) console.log("Plus tard, je suis " + this.name); }, 1000); } }; obj.sayLater(); // Plus tard, je suis David