Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Il module pattern

  1. #1

    Il module pattern

    Non riesco a capire questo codice semplicissimo:
    codice:
    (function (exports) {
    var api = {
    moduleExists: function test() {
    return true;
    }
    };
    $.extend(exports, api);
    }((typeof exports === 'undefined') ?
    window : exports));
    test('Pass in exports.', function () {
    ok(moduleExists(),
    'The module exists.');
    });
    e le ragioni sono moltlepici:
    1) So cosa è una espressione di funzione invocata immediatamente anche perché il libro lo spiega pure però non mi è chiaro come javascript interpreta il codice dentro le parentesi tonde e precisamente questo codice:
    codice:
    ((typeof exports === 'undefined') ?
    window : exports)
    2) Inoltre con capisco perché la funzione anonima invocata immediatamente deve essere racchiusa da altre parentesi donte pena il funzionamento dello script.
    Mi date una mano a leggere questo codice?
    Grazie
    Più pratica in futuro...

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    1) se exports non è undefined i metodi vengono agganciati a quell'object, altrimenti come fallback vengono esportati nell'oggetto window. è un costrutto ternario

    2) Le parentesi aggiuntive sono necessarie per far sì che la funzione produca un lexical scope e che tutto il costrutto sia visto come
    codice:
    (<expression>)()
    dove la seconda coppia di parentesi è l'invocazione di tutta l'espressione (cioè la funzione)

    si può comunque scrivere (ed è la versione più diffusa)
    codice:
    (<expression>())
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    La prima cosa che hai scritto mi è chiarissima e ti ringrazio, mi ha anche aiutato questo esempio:
    codice:
    var app = {};
    (function (exports) {
    (function (exports) {
    var api = {
    moduleExists: function test() {
    return true;
    }
    };
    $.extend(exports, api);
    }((typeof exports === 'undefined') ?
    window : exports));
    }(app));
    test('Pass app as exports.', function () {
    ok(app.moduleExists(),
    'The module exists.');
    });
    Per quanto riguarda il secondo punto invece mi pare di capire che sia una regola come le virgole, i punti e virgola e tutto il resto. Bene!

    Mille grazie!

    Più pratica in futuro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.