Maison > interface Web > js tutoriel > le corps du texte

Explication détaillée des exemples de fonctions d'exécution immédiate en JavaScript

小云云
Libérer: 2017-12-09 13:39:11
original
1664 Les gens l'ont consulté

Javascript est plus décontracté que les autres langages de programmation, donc le code JavaScript est plein de toutes sortes de méthodes d'écriture étranges, qui peuvent parfois ressembler à de la fumée et des miroirs. Bien sûr, être capable de comprendre toutes sortes de méthodes d'écriture est aussi un avantage. compréhension plus approfondie des caractéristiques du langage JavaScript. Cet article vous présente principalement les informations pertinentes sur la fonction d'exécution immédiate en JavaScript. J'espère qu'il pourra vous aider.

Préface

la fonction d'exécution js permet immédiatement à votre fonction d'être exécutée immédiatement après la création du mode d'exécution js est une syntaxe, ce mode. permet à vos fonctions d'être exécutées immédiatement après leur définition. Ce mode est essentiellement une expression de fonction (nommée ou anonyme) qui est exécutée immédiatement après sa création.

( function(){…} )() et ( function (){…} () ) sont deux façons courantes d'écrire des fonctions JavaScript à exécuter immédiatement. Au début, je pensais qu'il s'agissait d'une fonction anonyme encapsulée. entre parenthèses, puis l'ajout de parenthèses à la fin pour appeler la fonction atteint finalement l'objectif d'exécuter la fonction immédiatement après sa définition. Plus tard, il a été découvert que la raison de l'ajout des parenthèses n'était pas la même.

Pas grand chose à dire ci-dessous, jetons un œil à l'introduction détaillée.

Habituellement, nous déclarons une fonction des manières suivantes :

// 声明函数f1
function f1() {
 console.log("f1");
}
// 通过()来调用此函数
f1();


//一个匿名函数的函数表达式,被赋值给变量f2:
var f2 = function() {
 console.log("f2");
}
//通过()来调用此函数
f2();


//一个命名为f3的函数的函数表达式(这里的函数名可以随意命名,可以不必和变量f3重名),被赋值给变量f3:
var f3 = function f3() {
 console.log("f3");
}
//通过()来调用此函数
f3();
Copier après la connexion

Si vous avez vu quelques contrôles personnalisés, vous constaterez que la plupart d'entre eux suivent ce style d'écriture :

(function() {
 "
 // 这里开始写功能需求
 })();
Copier après la connexion

C'est ce qu'on dit souvent immédiatement Fonction d'exécution ( IIFE), comme son nom l'indique, signifie que cette fonction exécute le corps de la fonction immédiatement et ne nécessite pas que vous l'appeliez activement. Généralement, nous n'utilisons IIFE que pour les fonctions anonymes :

Premièrement, il n'est pas nécessaire de nommer la fonction, ce qui évite de contaminer les variables globales

Deuxièmement, une portée distincte est formée à l'intérieur de IIFE, qui peut encapsuler certaines variables privées qui ne peuvent pas être lues en externe.

Si vous n’arrivez pas à comprendre ces deux phrases, commençons par le principe de fonctionnement de l’IIFE.

Étant donné que IIFE est généralement utilisé pour les fonctions anonymes, nous utilisons ici une simple fonction anonyme comme exemple :

var f = function(){
 console.log("f");
}
f();
Copier après la connexion

Nous avons trouvé ici que f n'est qu'une variable de référence de cette fonction anonyme, donc puisque f() peut appeler cette fonction, puis-je remplacer f par la fonction elle-même :

function(){
 console.log("f"); 
}();
Copier après la connexion

Après l'exécution, les résultats suivants sont obtenus :

Uncaught SyntaxError: Unexpected token (
Copier après la connexion

La raison de cette erreur est qu'après que le moteur Javascript ait vu le mot-clé de fonction, il pense qu'il est suivi de Les déclarations de fonction ne doivent pas se terminer par des parenthèses. La solution est de faire savoir au moteur que la partie avant les parenthèses n'est pas une instruction de définition de fonction, mais une expression, qui peut être calculée. Voici une distinction entre la déclaration de fonction et l'expression de fonction :

1. déclaration (C'est-à-dire que nous utilisons généralement la fonction x(){} pour déclarer une fonction)

function myFunction () { /* logic here */ }
Copier après la connexion

2. Expression de fonction (similaire à ce formulaire)

var myFunction = function () { /* logic here */ };
var myObj = {
 myFunction: function () { /* logic here */ }
};
Copier après la connexion

On a appris à l'école primaire que les expressions entourées de () seront exécutées en premier, comme les suivantes :

1+(2+3) //这里先运行小括号里面的内容没有意见撒
Copier après la connexion

En fait, les parenthèses ont un effet similaire en JavaScript Lorsque le moteur Javascript voit le mot-clé de fonction, il pensera qu'il s'agit d'une déclaration de fonction. le moteur Javascript voit les parenthèses en premier. Que se passe-t-il avec les parenthèses :

//用小括号把函数包裹起来
(function(){
  console.log("f");  
})();
Copier après la connexion

La fonction s'exécute avec succès :

f //控制台输出
Copier après la connexion

Dans ce cas, le moteur Javascript pensera qu'il s'agit d'une expression, pas d'une déclaration de fonction. Bien sûr, il existe de nombreuses façons de faire croire au moteur Javascript qu'il s'agit d'une expression :

!function(){}();
+function(){}();
-function(){}();
~function(){}();
new function(){ /* code */ }
new function(){ /* code */ }() // 只有传递参数时,才需要最后那个圆括号。
……
Copier après la connexion

Retour à la question précédente, pourquoi dit-on que IIFE évite de polluer les variables globales Si vous avez vu des plug-ins jquery écrits par d'autres, là ? est généralement un code similaire à celui-ci :

(function($){
  "
  //插件实现代码
})(jQuery);
Copier après la connexion

Le jquery ici est en fait le paramètre de la fonction anonyme. Pensez-y lorsque nous appelons la fonction anonyme, nous utilisons f(), alors le paramètre anonyme est f(args ). C'est vrai, ici jquery est passé dans la fonction en tant que paramètre, puis lorsque le paramètre formel $ est utilisé à l'intérieur de la fonction, cela n'affectera pas l'environnement externe, car certains les plug-ins utilisent également le qualificatif $. Vous pouvez le lancer librement.

Recommandations associées :

Fonction d'exécution immédiate dans JS

Trois façons différentes d'écrire du JavaScript à exécution immédiate function_javascript Conseils

Introduction aux expressions de fonction d'exécution immédiate dans les astuces JavaScript_javascript

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