2012-04-12 5 views
2

Ich bin (wieder) auf https://developer.mozilla.org/en/AJAX/Getting_Started Ajax von der Mozilla-Website zu lernen, und ich bin mit diesem Codesegment konfrontiert:Was bedeutet (function() bedeutet in diesem speziellen Code-Segment

(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. )(); 

Während Ich habe es verstanden, den Code zu verstehen und es zum Laufen zu bringen, bis ich den "(function() {" - Teil oben und alle End-Klammern am Ende dieses Codesegments entfernt habe. Das Ding verstehe ich nicht Der Zweck von "(Funktion {", und es scheint auch nicht FF. (Es erkennt dieses Segment nicht als Javascript, bis ich die "(Funktion {" Teile) abgestreift. Kennt jemand den Zweck dieses Segments des Codes? Ich wusste, dass ich es auch irgendwo gesehen habe und dieses Mal möchte ich genau wissen, was es bedeutet.

Vielen Dank im Voraus für Ihre Hilfe. Diese

Antwort

2

(function() { /* code here */ })(); erstellt eine anonyme Funktion und führt sie an Ort und Stelle aus. Einer der Zwecke besteht darin, einen lokalen Bereich zu erstellen.

7

:

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

erzeugt eine Funktion, und ruft sie sofort mit einem eigenen Rahmen. Ein gebräuchlicher Ausdruck hierfür ist ein IIFE - "sofort aufgerufener Funktionsausdruck".

In diesem Fall haben Sie versehentlich die letzten beiden Zeilen kombiniert, sodass der einzeilige Kommentar, der bwalton enthält, den Code durch Entfernen des nachfolgenden )(); gelöscht hat.

Ohne die abschließende () haben Sie eine Funktionsreferenz, aber es wird nicht aufgerufen.

Alles, was Sie tun müssen, um Ihre Kopie des Codes zu beheben, ist ein Wagenrücklauf nach bwalton 5/11/11. hinzuzufügen.

+0

Du bist eine Klammer kurz gesagt, bist du nicht? Es ist erwähnenswert, dass die erste öffnende Klammer und ihr schließendes Paar weggelassen werden können, aber als Konvention (als visueller Indikator) dienen, dass diese Funktion sofort aufgerufen wird. Sie sind nicht erforderlich. Jedoch ist das '();' am Ende definitiv für den Aufruf erforderlich. –

+0

@JordanArsault ja - ich habe eins verpasst - danke! – Alnitak

+0

Vielen Dank, Leute. Ihre kombinierten Kommentare haben mir geholfen, es vollständig zu verstehen. Prost. :) – anthonytwp

0

Sehen Sie, dass ()();

Das ist ein Aufruf Klammer an einen Wert angehängt. Jetzt.

(function(){}); 

ist eine Funktion, eine anonyme Funktion, die unter der Klammer geschlossen wird. Alles hinzufügen.

(function(){})(); 

ein Aufruf einer in Klammern eingeschlossenen Funktion. Erstaunlich !!