Vraag Wat doen lege haakjes () na een functie-aangifte in javascript? [duplicaat]


Deze vraag heeft hier al een antwoord:

Ik probeer de prototype bron te lezen. Ik ben naar dit gedeelte gekomen (helaas staat dit fragment in het begin).

Wat betekent dit?

  Browser: (function(){
    var ua = navigator.userAgent;
    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
    return {
      IE:             !!window.attachEvent && !isOpera,
      Opera:          isOpera,
      WebKit:         ua.indexOf('AppleWebKit/') > -1,
      Gecko:          ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
      MobileSafari:   /Apple.*Mobile.*Safari/.test(ua)
    }
  })(),

Ik doel op de laatste regel voor de komma?


53
2018-03-11 01:52


oorsprong


antwoorden:


De code definieert een anonieme functie (de (function (){ ... }) bit) en noem het dan (zonder argumenten). Vervolgens wijst het de waarde toe aan de Browser eigenschap van het object dat vermoedelijk wordt gedefinieerd buiten uw codefragment.

Je zou de functie ook ergens kunnen definiëren:

function myFunction() {
    var ua = navigator.userAgent;
    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
    return {
      IE:             !!window.attachEvent && !isOpera,
      Opera:          isOpera,
      WebKit:         ua.indexOf('AppleWebKit/') > -1,
      Gecko:          ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
      MobileSafari:   /Apple.*Mobile.*Safari/.test(ua)
}

en noem het dan:

var foo = myFunction();

en wijs dan de waarde toe:

...
Browser: foo,
...

Een nadeel hiervan is dat je "je naamruimte vervuilt" met een functie en een variabele die je nergens anders zult gebruiken. Het tweede probleem is dat u de waarde van lokaal gedefinieerde variabelen niet kunt gebruiken in uw functiedefinitie (de anonieme functie gedraagt ​​zich als een afsluiting).


40
2018-03-11 01:58



(function () {}) creëert een anonieme functie.

Het toevoegen van de () tot slot roept de functie die zojuist is gemaakt.

In het geval van deze specifieke functie retourneert de anonieme functie verschillende eigenschappen aan de Browser voorwerp. Dus je eindigt met booleaanse waarden voor bijvoorbeeld Browser.IE, Browser.Opera, enz.


28
2018-03-11 02:07



het roept de anonieme functie die zojuist is gedeclareerd, waardoor het "blok" daadwerkelijk wordt geëvalueerd.


12
2018-03-11 01:53



Het is een eenvoudige functieaanroep, niet anders dan foo() behalve dat het een anonieme letterlijke functie aanroept, wordt het resultaat van de functie toegewezen aan de Browser eigendom.


5
2018-03-11 01:53