Je savais ce que cela signifiait, mais je me bats maintenant ...
Est-ce à dire essentiellement document.onload
?
(function () {
})();
javascript
iife
Exitos
la source
la source
Réponses:
C'est une expression de fonction immédiatement invoquée , ou IIFE pour faire court. Il s'exécute immédiatement après sa création.
Cela n'a rien à voir avec un gestionnaire d'événements pour des événements (tels que
document.onload
).Considérez la partie dans la première paire de parenthèses: .... c'est une expression de fonction régulière. Regardez ensuite la dernière paire , celle-ci est normalement ajoutée à une expression pour appeler une fonction; dans ce cas, notre expression préalable.
(function(){})();
(function(){})();
Ce modèle est souvent utilisé lorsque vous essayez d'éviter de polluer l'espace de noms global, car toutes les variables utilisées à l'intérieur de l'IIFE (comme dans toute autre fonction normale ) ne sont pas visibles en dehors de sa portée.
C'est pourquoi, peut-être, vous avez confondu cette construction avec un gestionnaire d'événements pour
window.onload
, car il est souvent utilisé comme ceci:Correction suggérée par Guffa :
Mise à jour Comme il s'agit d'un sujet assez populaire, il convient de mentionner que l'IIFE peut également être écrit avec la fonction de flèche d' ES6 (comme Gajus l' a souligné dans un commentaire ):
la source
function(){ var foo = '5'; }
C'est juste une fonction anonyme qui est exécutée juste après sa création.
C'est comme si vous l'attribuiez à une variable et l'utilisiez juste après, uniquement sans la variable:
Dans jQuery, il existe une construction similaire à laquelle vous pourriez penser:
C'est la forme courte de lier l'
ready
événement:Mais les deux constructions ci-dessus ne sont pas des IIFE .
la source
Une expression de fonction immédiatement invoquée (IIFE) appelle immédiatement une fonction. Cela signifie simplement que la fonction est exécutée immédiatement après l'achèvement de la définition.
Trois formulations plus courantes:
S'il n'y a pas d'exigences particulières pour sa valeur de retour, alors nous pouvons écrire:
Alternativement, cela peut être:
Vous pouvez même écrire:
la source
31.new
'est une syntaxe invalide;(function(){}());
1 - 1
et vous pouvez le faire tout aussi facilementtrue - function(){}
. Ce n'est qu'une chose (un opérateur de soustraction infixe) mais avec des opérandes différents, voire absurdes.Il déclare une fonction anonyme, puis l'appelle:
la source
arguments
est spécial ; je suppose que le répondeur vient de retourner où les noms vontCela signifie exécuter immédiatement.
donc si je le fais:
Violon: http://jsfiddle.net/maniator/LqvpQ/
Deuxième exemple:
la source
Cette construction est appelée une expression de fonction immédiatement invoquée (IIFE), ce qui signifie qu'elle est exécutée immédiatement. Considérez-le comme une fonction appelée automatiquement lorsque l'interprète atteint cette fonction.
Cas d'utilisation le plus courant:
L'un de ses cas d'utilisation les plus courants est de limiter la portée d'une variable effectuée via
var
. Les variables créées viavar
ont une portée limitée à une fonction, de sorte que cette construction (qui est un wrapper de fonction autour de certains codes) s'assurera que votre portée de variable ne s'échappe pas de cette fonction.Dans l'exemple suivant,
count
ne sera pas disponible en dehors de la fonction immédiatement invoquée, c'est-à-dire que la portée decount
ne sortira pas de la fonction. Vous devriez obtenir unReferenceError
, si vous essayez quand même d'y accéder en dehors de la fonction immédiatement invoquée.Alternative ES6 (recommandé)
Dans ES6, nous pouvons désormais créer des variables via
let
etconst
. Les deux ont une portée de bloc (contrairement à lavar
portée de fonction).Par conséquent, au lieu d'utiliser cette construction complexe de IIFE pour le cas d'utilisation que j'ai mentionné ci-dessus, vous pouvez maintenant écrire du code beaucoup plus simple pour vous assurer que la portée d'une variable ne s'échappe pas du bloc souhaité.
Dans cet exemple, nous avons utilisé
let
pour définir unecount
variable qui secount
limite au bloc de code, nous avons créé avec les accolades{...}
.Je l'appelle une «prison bouclée».
la source
Cela s'appelle IIFE (Immediateely Invoked Function Expression). L'un des célèbres modèles de conception JavaScript, il est le cœur et l'âme du modèle de module moderne. Comme son nom l'indique, il s'exécute immédiatement après sa création. Ce modèle crée un périmètre d'exécution isolé ou privé.
JavaScript avant ECMAScript 6 utilisait la portée lexicale, donc IIFE a été utilisé pour simuler la portée des blocs. (Avec l'ECMAScript 6, la portée des blocs est possible avec l'introduction des mots clés
let
etconst
.) Référence pour problème avec la portée lexicaleSimuler la portée d'un bloc avec IIFE
L'avantage de la performance de l' utilisation de Ia vie est la capacité de passer des objets globaux couramment utilisés comme
window
,document
, etc. comme argument en réduisant la recherche de portée. (N'oubliez pas que JavaScript recherche les propriétés dans la portée locale et dans la chaîne jusqu'à la portée globale). Ainsi, l'accès aux objets globaux dans la portée locale réduit le temps de recherche comme ci-dessous.la source
Non, cette construction crée simplement une portée pour la dénomination. Si vous le cassez en plusieurs parties, vous pouvez voir que vous avez un
C'est une invocation de fonction. À l'intérieur de la parenthèse, vous avez:
C'est une fonction anonyme. Tout ce qui est déclaré avec var à l'intérieur de la construction ne sera visible qu'à l'intérieur de la même construction et ne polluera pas l'espace de noms global.
la source
Il s'agit d'une expression de fonction immédiatement invoquée en Javascript:
Pour comprendre l'IFEF en JS, décomposons-le:
Exemple: Essayez de suivre dans la console Chrome. Ce sont des expressions dans JS.
Exemple:
Comment fonctionne l'expression de fonction:
- Lorsque le moteur JS s'exécute pour la première fois (contexte d'exécution - phase de création), cette fonction (sur le côté droit de = ci-dessus) n'est pas exécutée ni stockée dans la mémoire. La variable «salutation» reçoit une valeur «non définie» par le moteur JS.
- Pendant l'exécution (Contexte d'exécution - Phase d'exécution), l'objet funtion est créé à la volée ( il n'est pas encore exécuté ), est affecté à la variable 'saluer' et il peut être invoqué en utilisant 'saluer (' un nom ')'.
3. Expression Funtion immédiatement invoquée:
Exemple:
Comment fonctionne l'IFEF :
- Remarquez le '()' immédiatement après la déclaration de fonction. Chaque objet funtion a une propriété 'CODE' attachée qui peut être appelée. Et nous pouvons l'appeler (ou l'invoquer) en utilisant des accolades '()'.
- Donc ici, pendant l'exécution (Contexte d'exécution - Phase d'exécution), l'objet fonction est créé et son exécuté en même temps - Alors maintenant, la variable de salutation, au lieu d'avoir l'objet funtion, a sa valeur de retour (une chaîne)
Cas d'utilisation typique de IIFE dans JS:
Le modèle IIFE suivant est assez couramment utilisé.
b) Nous invoquons cette fonction en même temps en utilisant le () à la fin.
Cette fonction est donc créée et exécutée en même temps (IIFE).
Cas d'utilisation important pour IIFE:
L'IFEF garde notre code en sécurité.
- IIFE, étant une fonction, a son propre contexte d'exécution, ce qui signifie que toutes les variables créées à l'intérieur sont locales à cette fonction et ne sont pas partagées avec le contexte d'exécution global.
Supposons que j'ai un autre fichier JS (test1.js) utilisé dans mon application avec iife.js (voir ci-dessous).
L'IIFF nous aide donc à écrire du code sûr où nous n'entrons pas en collision involontairement avec les objets globaux.
la source
Il s'agit d'une fonction anonyme auto-invoquante .
Consultez l' explication W3Schools d'une fonction auto-invoquante .
la source
(function named(){console.log("Hello");}());
<- fonction nommée auto-Il s'agit de la fonction anonyme auto-invoquante. Il est exécuté pendant sa définition. Ce qui signifie que cette fonction est définie et s'appelle immédiatement après la définition.
Et l'explication de la syntaxe est: La fonction dans la première
()
parenthèse est la fonction qui n'a pas de nom et par la();
parenthèse suivante, vous pouvez comprendre qu'elle est appelée au moment où elle est définie. Et vous pouvez passer n'importe quel argument dans cette deuxième()
parenthèse qui sera saisie dans la fonction qui se trouve dans la première parenthèse. Voir cet exemple:Ici, «l'objet» que vous passez sera accessible dans la fonction par «obj», comme vous le saisissez dans la signature de la fonction.
la source
Commencer ici:
Mettez-le dans une fonction et il n'est plus global - votre objectif principal.
Appelez immédiatement la fonction - oups:
Utilisez les parenthèses pour éviter une erreur de syntaxe:
Vous pouvez laisser le nom de la fonction:
Cela n'a pas besoin d'être plus compliqué que cela.
la source
Uncaught SyntaxError: Unexpected token )
plutôt que toute mention de la fonction flèche. Pourriez-vous éventuellement partager un violon en lançant l'erreur de fonction flèche?Fonction anonyme auto-exécutable. Il est exécuté dès sa création.
Un exemple court et factice où cela est utile est:
Ainsi, au lieu de créer une liste à chaque fois, vous ne la créez qu'une seule fois (moins de surcharge).
la source
Les fonctions auto-exécutables sont généralement utilisées pour encapsuler le contexte et éviter les collusions de noms. Toute variable que vous définissez à l'intérieur de la (fonction () {..}) () n'est pas globale.
Le code
produit cette sortie:
En utilisant cette syntaxe, vous évitez d'entrer en collision avec des variables globales déclarées ailleurs dans votre code JavaScript.
la source
var same_name = 1; var myVar = function() { var same_name = 2; console.log(same_name); }; myVar(); console.log(same_name);
Aurait le même résultat.Il est appelé IIFE - Expression de fonction immédiatement invoquée. Voici un exemple pour montrer sa syntaxe et son utilisation. Il est utilisé pour limiter l'utilisation des variables uniquement jusqu'à la fonction et pas au-delà.
la source
IIFE (expression de fonction immédiatement invoquée) est une fonction qui s'exécute dès que le script se charge et disparaît.
Considérez la fonction ci-dessous écrite dans un fichier nommé iife.js
Ce code ci-dessus s'exécutera dès que vous chargerez iife.js et affichera ' Hello Stackoverflow! 'sur la console des outils de développement.
Pour une explication détaillée, voir Expression de fonction immédiatement invoquée (IIFE)
la source
Un autre cas d'utilisation est la mémorisation où un objet de cache n'est pas global:
la source
An
IIFE
peut également être décrit comme une fonction anonyme auto-invoquante. Son utilisation la plus courante consiste à limiter la portée d'une variable créée via var ou à encapsuler le contexte pour éviter les collisions de noms.la source
La raison pour laquelle des fonctions anonymes auto-évoquantes sont utilisées est qu'elles ne devraient jamais être appelées par un autre code car elles "configurent" le code qui EST censé être appelé (tout en donnant la portée aux fonctions et aux variables).
En d'autres termes, ils sont comme des programmes qui "font des classes", au début du programme. Après avoir été instanciés (automatiquement), les seules fonctions disponibles sont celles renvoyées par la fonction anonyme. Cependant, toutes les autres " les fonctions cachées sont toujours là, avec n'importe quel état (variables définies lors de la création de la portée).
Très cool.
la source
Le code suivant:
est appelée expression de fonction immédiatement invoquée (IIFE).
On l'appelle une expression de fonction car l'
( yourcode )
opérateur en Javascript la force dans une expression. La différence entre une expression de fonction et une déclaration de fonction est la suivante:Une expression est simplement un tas de code qui peut être évalué en une seule valeur . Dans le cas des expressions de l'exemple ci-dessus, cette valeur était un objet de fonction unique .
Une fois que nous avons une expression qui s'évalue en un objet fonction, nous pouvons alors invoquer immédiatement l'objet fonction avec l'
()
opérateur. Par exemple:Pourquoi est-ce utile?
Lorsque nous avons affaire à une grande base de code et / ou lorsque nous importons diverses bibliothèques, les risques de conflits de noms augmentent. Lorsque nous écrivons certaines parties de notre code qui sont liées (et donc utilisent les mêmes variables) à l'intérieur d'un IIFE, toutes les variables et les noms de fonction sont limités aux crochets de fonction de l'IIFF . Cela réduit les risques de nommer les conflits et vous permet de les nommer plus négligents (par exemple, vous n'avez pas à les préfixer).
la source
Dans la syntaxe ES6 (publication pour moi-même, car je continue d'atterrir sur cette page à la recherche d'un exemple rapide):
la source
Cette fonction est appelée fonction auto-invoquante. Une fonction auto-invoquante (également appelée auto-exécutable) est une fonction sans nom (anonyme) qui est invoquée (appelée) immédiatement après sa définition. En savoir plus ici
Ce que font ces fonctions, c'est que lorsque la fonction est définie, la fonction est immédiatement appelée, ce qui économise du temps et des lignes de code supplémentaires (par rapport à l'appel sur une ligne séparée).
Voici un exemple:
la source
Voici une explication plus approfondie de la raison pour laquelle vous utiliseriez ceci:
"La principale raison d'utiliser un IIFE est d'obtenir la confidentialité des données. Étant donné que la var de JavaScript étend les variables à leur fonction contenante, toutes les variables déclarées dans le IIFE ne sont pas accessibles au monde extérieur."
http://adripofjavascript.com/blog/drips/an-introduction-to-iffes-immediately-invoked-function-expressions.html
la source
C'est une expression de fonction, elle signifie Immediately Invoked Function Expression (IIFE). IIFE est simplement une fonction qui est exécutée juste après sa création. Si la fonction doit attendre jusqu'à ce qu'elle soit appelée pour être exécutée, IIFE est exécuté immédiatement. Construisons l'exemple IIFE. Supposons que nous ayons une fonction add qui prend deux entiers comme arguments et renvoie la somme permet de transformer la fonction add en IIFE,
Étape 1: définir la fonction
Étape 2: appelez la fonction en enveloppant l'intégralité de la déclaration de fonction entre parenthèses
Étape 3: Pour réactiver immédiatement la fonction, il suffit de supprimer le texte «ajouter» de l'appel.
La principale raison d'utiliser un IFFE est de conserver une portée privée au sein de votre fonction. Dans votre code javascript, vous voulez vous assurer que vous ne remplacez aucune variable globale. Parfois, vous pouvez accidentellement définir une variable qui remplace une variable globale. Essayons par l'exemple. supposons que nous ayons un fichier html appelé iffe.html et que les codes à l'intérieur de la balise body soient-
Eh bien, le code ci-dessus s'exécutera sans aucune question, supposons maintenant que vous avez redécouvert une variable nommée document accidentellement ou intentionnellement.
vous vous retrouverez dans un SyntaxError : redéclaration de document de propriété globale non configurable.
Mais si vous souhaitez supprimer un document de nom de variable, vous pouvez le faire en utilisant IFFE.
Production:
Essayons par un autre exemple, supposons que nous ayons un objet calculatrice comme ci-dessous-
Eh bien, cela fonctionne comme un charme, et si nous réaffectons accidentellement la valeur de l'objet calculatrice.
oui vous vous retrouverez avec une TypeError: calculator.mul n'est pas une fonction iffe.html
Mais avec l'aide de l'IFFE, nous pouvons créer une portée privée où nous pouvons créer une autre calculatrice de nom de variable et l'utiliser;
Production:
la source
Je pense que les 2 jeux de parenthèses le rendent un peu déroutant mais j'ai vu une autre utilisation dans l'exemple de Google, ils ont utilisé quelque chose de similaire, j'espère que cela vous aidera à mieux comprendre:
donc si
windows.app
n'est pas défini, alorswindow.app = {}
est immédiatement exécuté, doncwindow.app
est affecté avec{}
pendant l'évaluation de la condition, donc le résultat est à la foisapp
etwindow.app
devient maintenant{}
, donc la sortie de la console est:la source
Habituellement, nous n'appelons pas une fonction immédiatement après l'avoir écrite dans le programme. En termes extrêmement simples, lorsque vous appelez une fonction juste après sa création, elle s'appelle IIFE - un nom de fantaisie.
la source
Normalement, le code JavaScript a une portée globale dans l'application. Lorsque nous y déclarons une variable globale, il est possible d'utiliser la même variable en double dans une autre zone du développement à d'autres fins. En raison de cette duplication, il peut se produire une erreur. Ainsi, nous pouvons éviter ces variables globales en utilisant l'expression de fonction immédiatement invoquée, cette expression est une expression auto- exécutable .
Deux façons de créer l' IIFE
OU
Dans l'extrait de code ci-dessus, « var app » est désormais une variable locale.
la source