2 votes

Que signifie (fonction() dans ce segment de code particulier?

Je suis en train d'apprendre (de nouveau) Ajax sur le site de Mozilla sur https://developer.mozilla.org/en/AJAX/Getting_Started, et je suis confronté à ce segment de code :

(function () {
    var httpRequest;
    document.getElementById("ajaxButton").onclick = function () {
        makeRequest('test.html');
    };

    function makeRequest(url) {
        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            httpRequest = new XMLHttpRequest();
        } else if (window.ActiveXObject) { // IE
            try {
                httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!httpRequest) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        httpRequest.onreadystatechange = alertContents;
        httpRequest.open('GET', url);
        httpRequest.send();
    }

    function alertContents() {
        if (httpRequest.readyState === 4) {
            if (httpRequest.status === 200) {
                alert(httpRequest.responseText);
            } else {
                alert('There was a problem with the request.');
            }
        }
    }
} //missing closing bracket added by bwalton 5/11/11.   )();

Même si j'ai réussi à comprendre le code et à le faire fonctionner, ce n'est qu'après avoir enlevé la partie "(function() {" en haut et toutes les accolades à la fin de ce segment de code. Le problème est que je ne comprends pas l'utilité de "(function{", et il semble que Firefox non plus. (Il ne reconnaît pas ce segment comme du Javascript tant que je n'ai pas enlevé les portions "(function{". Est-ce que quelqu'un sait à quoi sert ce morceau de code? Je suis sûr de l'avoir vu quelque part aussi, et cette fois-ci je veux savoir exactement ce que cela signifie.

Merci d'avance pour votre aide.

7voto

Alnitak Points 143355

Cela :

(function() {
    ...
})();

crée une fonction et l'appelle immédiatement, avec son propre scope. Un terme courant pour cela est une IIFE - "expression de fonction invoquée immédiatement".

Dans ce cas, vous avez involontairement combiné les deux dernières lignes, donc le commentaire sur une seule ligne mentionnant bwalton a cassé le code en supprimant le )(); final.

Sans le () final, vous avez une référence de fonction, mais elle n'est pas invoquée.

Tout ce que vous devez faire pour corriger votre copie du code est d'ajouter un retour à la ligne après bwalton 5/11/11..

2voto

Shedal Points 6482

(function() { /* code here */ })(); crée une fonction anonyme et l'exécute sur place. L'un des buts est de créer une portée locale.

0voto

Satish N Ramteare Points 144

Voyez-vous que ()();

il s'agit d'une parenthèse d'appel attachée à une valeur. Maintenant.

(function(){});

est une fonction, une fonction anonyme fermée sous la parenthèse. En ajoutant tout cela.

(function(){}) ();

un appel à une fonction encadrée entre des parenthèses. Incroyable!!

0voto

gillesc Points 4093

Comme expliqué ci-dessus, il s'agit d'une fermeture, consultez les liens pour plus d'informations sur les fermetures http://jibbering.com/faq/notes/closures/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X