Quelle est la construction (function () {}) () en JavaScript?

Cet article a été traduit de: Quelle est la construction (function () {}) () en JavaScript?

Je savais ce que cela signifiait, mais je me bats maintenant ... Je savais ce que cela signifiait, mais maintenant j'essaie ...

Fondamentalement dire la IS ce document.onload? Cela revient à dire document.onloadqu'il?

(function () {

})();

# 1 étage

Référence: https://stackoom.com/question/YWYD/ Quelle est la construction -fonction en JavaScript


# 2F

Les fonctions auto-exécutables sont généralement utilisées pour encapsuler le contexte et éviter les collusions de noms. 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 (function () {..}) () n'est pas globale. Toute variable que vous définissez à l'intérieur (function () {..}) () n'est pas une variable globale.

Le code de codage

var same_name = 1;

var myVar = (function() {
    var same_name = 2;
    console.log(same_name);
})();

console.log(same_name);

produit cette sortie: produit la sortie suivante:

2
1

En utilisant cette syntaxe, vous évitez d'entrer en collision avec des variables globales déclarées ailleurs dans votre code JavaScript. En utilisant cette syntaxe, vous pouvez éviter des conflits avec des variables globales déclarées ailleurs dans le code JavaScript .


# 3 étage

Une expression de fonction immédiatement invoquée (IIFE) appelle immédiatement une fonction. 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 la fin de la définition. Cela signifie seulement que la fonction est exécutée immédiatement après la fin de la définition.

Trois formulations plus courantes: Trois autres formulations courantes:

// Crockford's preference - parens on the inside
(function() {
  console.log('Welcome to the Internet. Please follow me.');
}());

//The OPs example, parentheses on the outside
(function() {
  console.log('Welcome to the Internet. Please follow me.');
})();

//Using the exclamation mark operator
//https://stackoverflow.com/a/5654929/1175496
!function() {
  console.log('Welcome to the Internet. Please follow me.');
}();

S'il n'y a pas d'exigences particulières pour sa valeur de retour, alors nous pouvons écrire: S'il n'y a pas d'exigences particulières pour sa valeur de retour, alors nous pouvons écrire :

!function(){}();  // => true
~function(){}(); // => -1
+function(){}(); // => NaN
-function(){}();  // => NaN

Alternativement, cela peut être :

~(function(){})();
void function(){}();
true && function(){ /* code */ }();
15.0, function(){ /* code */ }();

Vous pouvez même écrire: Vous pouvez même écrire :

new function(){ /* code */ }
31.new function(){ /* code */ }() //If no parameters, the last () is not required

# 4F

Ceci est la fonction anonyme auto-invoquante. Ceci est la fonction anonyme auto-invoquante . Il est exécuté pendant qu'il est défini Il est exécuté pendant qu'il est défini . Ce qui signifie que cette fonction est définie et s'appelle immédiatement après la définition. Cela signifie que cette fonction a été 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 suivante L' (); explication grammaticale est: ()();(); la fonction dans la première parenthèse est la fonction sans nom, et ensuite la fonction parenthèse que vous pouvez comprendre Qu'il est appelé au moment où il est défini. Entre parenthèses, vous pouvez comprendre qu'il est appelé lorsqu'il est défini . Et vous pouvez passer n'importe quel argument dans cette deuxième ()parenthèse qui sera récupéré dans la fonction qui est dans la première parenthèse. Vous pouvez ()passer n'importe quel paramètre dans la deuxième parenthèse, qui sera obtenu dans la fonction dans la première parenthèse . Voir cet exemple: Veuillez voir l'exemple suivant:

(function(obj){
    // Do something with this obj
})(object);

Ici, «l'objet» que vous passez sera accessible dans la fonction par «obj», comme vous le saisissez dans la signature de la fonction. Ici, «l'objet» que vous passez sera accessible dans la fonction via «obj», juste Tout comme vous l'avez saisi dans la signature de fonction.


# 5F

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 googles, ils ont utilisé quelque chose de similaire, j'espère que cela vous aidera à mieux comprendre: je pense que ces deux jeux de parenthèses vous font vous sentir un peu confus, mais je suis en Un autre exemple d'utilisation se trouve dans l'exemple de Google, et ils utilisent une utilisation similaire. J'espère que cela vous aidera à mieux comprendre:

var app = window.app || (window.app = {});
console.log(app);
console.log(window.app);

donc si windows.appn'est pas défini, alors window.app = {}est immédiatement exécuté, window.appest donc affecté avec {}pendant l'évaluation de la condition, donc le résultat est à la fois appet window.appdevient maintenant {}, donc la sortie de la console est: Par conséquent, s'il n'est pas défini windows.app, il sera exécuté immédiatement window.app = {}, donc pendant l'évaluation de la condition Sera window.appaffecté comme {}, donc le résultat est appet window.appdevient maintenant {}, donc la sortie de la console est:

Object {}
Object {}

# 6 étage

(function () {
})();

C'est ce qu'on appelle IIFE (Immediateely Invoked Function Expression), appelé IIFE (Immediateely Invoked Function Expression ). L'un des célèbres modèles de conception JavaScript, c'est le cœur et l'âme du modèle de module moderne. C'est l' un des célèbres modèles de conception JavaScript, c'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. 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é. 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 était utilisé pour simuler la portée des blocs. JavaScript avant ECMAScript 6 utilisait la portée lexicale, donc IIFE était utilisé pour simuler la portée des blocs. (Bloc de cadrage pour Constitue avec ECMAScript 6 L'introduction du possible avec letet constmots - clés.) Référence pour le problème avec une portée lexicale pour (par l' introduction letet constmots - clés, ECMAScript 6 peut être utilisé pour la portée du bloc.) Glossaire Champ d' application de référence

détermination de la portée de bloc Simulate avec Ia vie en utilisant la portée du bloc analogique Ia vie

De la prestation du rendement des utilisant apos de Ia vie est la capacité de passe couramment utilisés Objets globaux comme window, document, etc. argument AN en réduisant la portée de recherche. Avantage L' utilisation de la performance Ia vie est la capacité de regarder à travers la gamme réduisant couramment utilisée objet global (par exemple window, d' documentautres ) En paramètre. (N'oubliez pas que JavaScript recherche les propriétés dans la portée locale et le long de la chaîne jusqu'à la portée globale.) (Souvenez-vous, JavaScript recherche les propriétés dans la portée locale et continue de rechercher la portée globale dans la portée). Ainsi, l'accès aux objets globaux dans la portée locale réduit le temps de recherche comme ci-dessous. Par conséquent, l' accès aux objets globaux dans la portée locale peut réduire le temps de recherche comme indiqué ci-dessous.

(function (globalObj) {
//Access the globalObj
})(window);
Publié 0 articles originaux · loué 75 · 560 000 vues +

Je suppose que tu aimes

Origine blog.csdn.net/w36680130/article/details/105450114
conseillé
Classement