<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>bonnes pratiques Archives | DOTPROGS</title>
	<atom:link href="https://www.dotprogs.com/etiquette/bonnes-pratiques/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>DOTPROGS - Conception de sites web</description>
	<lastBuildDate>Wed, 17 Nov 2021 16:00:08 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.dotprogs.com/wp-content/uploaded-files/cropped-dotprogs-favicon-32x32.png</url>
	<title>bonnes pratiques Archives | DOTPROGS</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Fonction en JavaScript, « IIFE », et usage dit professionnel &#8230;</title>
		<link>https://www.dotprogs.com/function-iife-usages-javascript/</link>
		
		<dc:creator><![CDATA[DOTPROGS]]></dc:creator>
		<pubDate>Wed, 28 Sep 2016 12:59:51 +0000</pubDate>
				<category><![CDATA[Développement web]]></category>
		<category><![CDATA[Dotweb]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[appel]]></category>
		<category><![CDATA[bonnes pratiques]]></category>
		<category><![CDATA[déclaration]]></category>
		<category><![CDATA[fonction]]></category>
		<category><![CDATA[IIFE]]></category>
		<category><![CDATA[invocation]]></category>
		<category><![CDATA[objet]]></category>
		<category><![CDATA[requireJS]]></category>
		<guid isPermaLink="false">https://www.dotprogs.com/?p=488</guid>

					<description><![CDATA[<p><img width="1024" height="576" src="https://www.dotprogs.com/wp-content/uploaded-files/javascript-function-invocation.png" class="attachment-md_post_thumb_large size-md_post_thumb_large wp-post-image" alt="Invocation de fonction JavaScript, IIFE et bonnes pratiques" decoding="async" fetchpriority="high" /></p>
<h2 class="dp-level2-title">Fonctions et usages JavaScript</h2>
<h3 class="dp-level3-title">La notion de fonction "auto-exécutée"</h3>
<p>Cet article peut sembler simpliste, mais il apparaît utile de connaître les principales possibilités de déclarer une fonction en JavaScript.<br />
Personnellement, il m'arrive de produire du Javascript ponctuellement pour des besoins simples, je pense que c'est toujours constructif de s'interroger sur les bases de ce langage, l'objectif est avant tout de mieux comprendre ce que l'on écrit en JavaScript.</p>
<p>La tentation est souvent grande de bidouiller du code qui fonctionne malgré tout, mais c'est parfois bon aussi de s'arrêter pour faire le point sur de "modestes" notions.</p>
<p>Loin de moi l'idée, de faire de ce post, un exposé hasardeux sur les fonctions en JavaScript. Il faut bien plus que quelques lignes pour faire le tour du sujet, par contre, je suis parti de la notion de fonction en JavaScript pour mieux comprendre de quelle manière les usages actuels évoluent.</p>
<p>Petit tour d'horizon concernant les fonctions en JS pour arriver au sujet :<br />
- La fonction déclarative (déclaration classique voire basique)</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">function hello() {
    console.log(hello.name); //affiche hello  
}
hello();</pre>
<p>- L'expression de fonction anonyme</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">var myFunction = function() {
    console.log('myFunction called');
};
myFunction(); //affiche myFunction called</pre>
<p>- L'expression de fonction nominative</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">var myFunction = function hello() {
    console.log(hello.name);
};
myFunction(); //affiche hello
console.log(myFunction.name); //affiche hello</pre>
<p>- La méthode d'objet</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">//déclaration d'une fonction qui est un objet
var hello = function hello() {
};
//déclaration d'une méthode de l'objet
hello.myMethod = function() {
    console.log(this.name);
};
//appel
hello.myMethod(); //affiche hello</pre>
<p>- L'expression de fonction immédiatement invoquée (IIFE pour Immediatly Invoked Function Expression)</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">var myFunction = function hello() {
    console.log(hello.name); //affiche hello
}();
console.log(myFunction); //affiche undefined</pre>
<p>- L'expression de fonction immédiatement invoquée évaluée sans variable</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">// écriture 1
(function hello() {
    console.log(hello.name); //affiche hello
})();</pre>
<p>ou</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">// écriture 2
(function hello() {
     console.log(hello.name); //affiche hello
}());</pre>
<p>- Un exemple avec des arguments :</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">// écriture 1
(function hello(argument1, argument2) {
    console.log(hello.name); //affiche hello
    console.log(argument2); //affiche 1
})('test', 1);</pre>
<p>- L'instanciation de fonction avec constructeur "Function"</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">var hello = new Function('a', 'b', 'return a+b;');
console.log(hello(2, 3)); //affiche 5</pre>
<p>- Avec l'écriture "Arrow function" ES6 (plusieurs variantes de déclaration existent selon le nombre d'arguments !) :</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">((argument1, argument2) =&gt; {
    //votre script
})('test', 1);</pre>
<p>Une pratique désormais répandue est d'utiliser l'<a title="IIFE et scope" href="http://www.nicoespeon.com/fr/2013/05/bien-isoler-ses-variables-en-javascript/" target="_blank" rel="noopener">IIFE</a> pour structurer et surtout encapsuler voire "protéger ses scripts" au sein de la fonction avec la notion de "scope" (contexte) local à lui opposer au scope global (l'objet "window" du navigateur) : voici un très bon <a title="Concept d'IIFE" href="https://makina-corpus.com/blog/metier/2015/bien-demarrer-avec-javascript" target="_blank" rel="noopener">article</a> qui présente l'IIFE comme une bonne approche.</p>
<p>La notion de programmation en objet JavaScript en utilisant une IIFE est abordée avec humour <a title="Objet JavaScript et IIFE" href="https://www.miximum.fr/blog/pour-enfin-comprendre-javascript/" target="_blank" rel="noopener">ici</a>.</p>
<p>Pour aller plus loin et comprendre comment travaillent finalement les "spécialistes" du JavaScript, il est désormais question de <a title="Concept modulaire en JavaScript" href="http://blog.dynacase.org/bonnes-pratiques-dev-specifique-web-app/comment-decouper-votre-code-en-module-librairie-javascript-independante" target="_blank" rel="noopener">concept modulaire</a>, et là ça devient assez technique avec les approches du moment !</p>
<p>L'objectif de cet article est finalement d'y voir plus clair et comprendre quels sont les bons usages du JavaScript à l'heure actuelle et pointer le fait que l'IIFE (fonction "auto-exécutée" pour faire court) répond à des besoins bien spécifiques pour structurer son code.</p>
<p>Enfin un <a title="Le milieu du Javascript évolue sans cesse." href="http://news.humancoders.com/t/javascript/items/14473-ce-que-j-ai-ressenti-en-apprenant-javascript-en-20/redirect" target="_blank" rel="noopener">témoignage</a> assez sympa (en anglais) qui montre bien que JavaScript est vraiment une jungle et qu'il faut en faire une compétence particulière pour rester dans les "rails" comme beaucoup d'autres domaines ...</p>
<p>Cet article <a href="https://www.dotprogs.com/function-iife-usages-javascript/">Fonction en JavaScript, « IIFE », et usage dit professionnel &#8230;</a> est apparu en premier sur <a href="https://www.dotprogs.com">DOTPROGS</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img width="1024" height="576" src="https://www.dotprogs.com/wp-content/uploaded-files/javascript-function-invocation.png" class="attachment-md_post_thumb_large size-md_post_thumb_large wp-post-image" alt="Invocation de fonction JavaScript, IIFE et bonnes pratiques" decoding="async" /></p><h2 class="dp-level2-title">Fonctions et usages JavaScript</h2>
<h3 class="dp-level3-title">La notion de fonction "auto-exécutée"</h3>
Cet article peut sembler simpliste, mais il apparaît utile de connaître les principales possibilités de déclarer une fonction en JavaScript.
Personnellement, il m'arrive de produire du Javascript ponctuellement pour des besoins simples, je pense que c'est toujours constructif de s'interroger sur les bases de ce langage, l'objectif est avant tout de mieux comprendre ce que l'on écrit en JavaScript.

La tentation est souvent grande de bidouiller du code qui fonctionne malgré tout, mais c'est parfois bon aussi de s'arrêter pour faire le point sur de "modestes" notions.

Loin de moi l'idée, de faire de ce post, un exposé hasardeux sur les fonctions en JavaScript. Il faut bien plus que quelques lignes pour faire le tour du sujet, par contre, je suis parti de la notion de fonction en JavaScript pour mieux comprendre de quelle manière les usages actuels évoluent.

Petit tour d'horizon concernant les fonctions en JS pour arriver au sujet :
- La fonction déclarative (déclaration classique voire basique)
<pre class="EnlighterJSRAW" data-enlighter-language="js">function hello() {
    console.log(hello.name); //affiche hello  
}
hello();</pre>
- L'expression de fonction anonyme
<pre class="EnlighterJSRAW" data-enlighter-language="js">var myFunction = function() {
    console.log('myFunction called');
};
myFunction(); //affiche myFunction called</pre>
- L'expression de fonction nominative
<pre class="EnlighterJSRAW" data-enlighter-language="js">var myFunction = function hello() {
    console.log(hello.name);
};
myFunction(); //affiche hello
console.log(myFunction.name); //affiche hello</pre>
- La méthode d'objet
<pre class="EnlighterJSRAW" data-enlighter-language="js">//déclaration d'une fonction qui est un objet
var hello = function hello() {
};
//déclaration d'une méthode de l'objet
hello.myMethod = function() {
    console.log(this.name);
};
//appel
hello.myMethod(); //affiche hello</pre>
- L'expression de fonction immédiatement invoquée (IIFE pour Immediatly Invoked Function Expression)
<pre class="EnlighterJSRAW" data-enlighter-language="js">var myFunction = function hello() {
    console.log(hello.name); //affiche hello
}();
console.log(myFunction); //affiche undefined</pre>
- L'expression de fonction immédiatement invoquée évaluée sans variable
<pre class="EnlighterJSRAW" data-enlighter-language="js">// écriture 1
(function hello() {
    console.log(hello.name); //affiche hello
})();</pre>
ou
<pre class="EnlighterJSRAW" data-enlighter-language="js">// écriture 2
(function hello() {
     console.log(hello.name); //affiche hello
}());</pre>
- Un exemple avec des arguments :
<pre class="EnlighterJSRAW" data-enlighter-language="js">// écriture 1
(function hello(argument1, argument2) {
    console.log(hello.name); //affiche hello
    console.log(argument2); //affiche 1
})('test', 1);</pre>
- L'instanciation de fonction avec constructeur "Function"
<pre class="EnlighterJSRAW" data-enlighter-language="js">var hello = new Function('a', 'b', 'return a+b;');
console.log(hello(2, 3)); //affiche 5</pre>
- Avec l'écriture "Arrow function" ES6 (plusieurs variantes de déclaration existent selon le nombre d'arguments !) :
<pre class="EnlighterJSRAW" data-enlighter-language="js">((argument1, argument2) =&gt; {
    //votre script
})('test', 1);</pre>
Une pratique désormais répandue est d'utiliser l'<a title="IIFE et scope" href="http://www.nicoespeon.com/fr/2013/05/bien-isoler-ses-variables-en-javascript/" target="_blank" rel="noopener">IIFE</a> pour structurer et surtout encapsuler voire "protéger ses scripts" au sein de la fonction avec la notion de "scope" (contexte) local à lui opposer au scope global (l'objet "window" du navigateur) : voici un très bon <a title="Concept d'IIFE" href="https://makina-corpus.com/blog/metier/2015/bien-demarrer-avec-javascript" target="_blank" rel="noopener">article</a> qui présente l'IIFE comme une bonne approche.

La notion de programmation en objet JavaScript en utilisant une IIFE est abordée avec humour <a title="Objet JavaScript et IIFE" href="https://www.miximum.fr/blog/pour-enfin-comprendre-javascript/" target="_blank" rel="noopener">ici</a>.

Pour aller plus loin et comprendre comment travaillent finalement les "spécialistes" du JavaScript, il est désormais question de <a title="Concept modulaire en JavaScript" href="http://blog.dynacase.org/bonnes-pratiques-dev-specifique-web-app/comment-decouper-votre-code-en-module-librairie-javascript-independante" target="_blank" rel="noopener">concept modulaire</a>, et là ça devient assez technique avec les approches du moment !

L'objectif de cet article est finalement d'y voir plus clair et comprendre quels sont les bons usages du JavaScript à l'heure actuelle et pointer le fait que l'IIFE (fonction "auto-exécutée" pour faire court) répond à des besoins bien spécifiques pour structurer son code.

Enfin un <a title="Le milieu du Javascript évolue sans cesse." href="http://news.humancoders.com/t/javascript/items/14473-ce-que-j-ai-ressenti-en-apprenant-javascript-en-20/redirect" target="_blank" rel="noopener">témoignage</a> assez sympa (en anglais) qui montre bien que JavaScript est vraiment une jungle et qu'il faut en faire une compétence particulière pour rester dans les "rails" comme beaucoup d'autres domaines ...<p>Cet article <a href="https://www.dotprogs.com/function-iife-usages-javascript/">Fonction en JavaScript, « IIFE », et usage dit professionnel &#8230;</a> est apparu en premier sur <a href="https://www.dotprogs.com">DOTPROGS</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
