Qual è il nome di una funzione NON auto-chiamante?

6

Ho una collezione di funzioni normali e funzioni di auto-chiamata all'interno di un file javascript. Nei miei commenti voglio dire qualcosa sulla falsariga di "Questo script può contenere sia la funzione di auto-chiamata che le funzioni XXX", dove XXX è la funzione non auto-chiamante.

Mi viene in mente "statico", ma ritengo che sarebbe errato a causa dell'uso di metodi statici in PHP, che è qualcosa di completamente diverso.

Qualche idea? Grazie!

    
posta Alan Lapington 24.05.2012 - 18:02
fonte

4 risposte

44

In primo luogo, le "funzioni di auto-chiamata" non sono in realtà auto-chiamate. So che è ciò che le persone della comunità Javascript chiamano, ma è davvero fuorviante; le funzioni non si riferiscono mai a se stesse e in effetti il più delle volte non c'è modo di chiamare quella particolare funzione più di una volta. Se fossero effettivamente funzioni di auto-chiamata, le funzioni ricorsive sarebbero state il modo migliore per nominarle.

Ciò che realmente hai sono (di solito) lambda immediatamente eseguiti i cui risultati sono memorizzati in una variabile al fine di limitare l'ambito dei loro interni. "IEL" non è così accattivante come "funzioni di auto-chiamata", quindi suppongo sia per questo che il vero nome non sia mai stato preso.

Il fatto è che è tutto troppo basso livello; è un dettaglio di implementazione a cui non importa a nessuno (è come dire "here be for loops"). In genere, quando si utilizzano le funzioni di esecuzione immediata, la ragione perché le si sta utilizzando è perché si sta creando un modulo, che ha bisogno del proprio spazio dei nomi.

Se è così, invece di dire "funzioni autoeseguibili", dovresti dire "questo script contiene moduli che fanno < stuff >". Altrimenti, dovresti capire cosa stai cercando di fare con le funzioni, e dire che è quello che c'è nel tuo script.

Ora, il motivo per cui usi i moduli in Javascript è perché altrimenti tutto va nella portata globale. Quelle altre funzioni che stai scrivendo, che non saranno nei moduli (o qualunque cosa tu decida di essere), finiranno qui. Quindi usa questo - "questo file di script contiene entrambi i moduli che fanno < stuff > e le funzioni globali che fanno < more stuff >".

    
risposta data 24.05.2012 - 19:46
fonte
21

Risposta rivista

OK, capisco cosa intendi. Non chiamerei quelle "funzioni di auto-chiamata" - la prima cosa che viene in mente è "funzioni immediatamente invocate". Anche il "modulo" funzionerebbe, ma non sono sicuro di quanto prontamente sarebbe compreso.

Piuttosto che parlare delle funzioni di "auto-chiamata" e "non auto-chiamata", documenterei lo script spiegando quali membri esso aggiunge nello spazio dei nomi globale.

Ad esempio, se le funzioni immediatamente richiamate impostano alcuni oggetti, descrivi tali oggetti. Fondamentalmente, descrivi com'è il mondo dopo che il tuo script è stato eseguito, non come il tuo script arriva a quel punto.

Risposta originale

Poiché "auto-chiamata" di solito significa "ricorsivo", direi semplicemente: "Questo script può contenere sia funzioni ricorsive che non ricorsive."

    
risposta data 24.05.2012 - 18:10
fonte
13

Forse sono le funzioni di auto-chiamata che dovrebbero essere chiamate qualcosa di diverso, come "ricorsivo". Forse qualcosa sulla falsariga di "Questo script può contenere sia funzioni ricorsive che non ricorsive."

    
risposta data 24.05.2012 - 18:09
fonte
-2

Questa è una funzione:

function foo() {
    ...
}

Questo è un costruttore:

function Foo() {
    ...
}
var f = new Foo();

Questo è un metodo:

Foo.prototype = {
    foo: function () { //this one
        ...
    }
}

Questo è un metodo statico:
in realtà è più una sintassi pseudo-statica per le persone abituate a linguaggi come Java e C #

function Foo() {}
Foo.foo = function () { //this one
    ...
}

Questa è una funzione privata:

function Foo() {
    function foo() {//this one
        ...
    }
    this.bar = function () {
        foo();
    }
}

Questa è una funzione anonima:

function () {
    ...
}

Questa è una Experssion Function immediatamente richiamato :

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

Questa è una funzione ricorsiva:

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

Questo è un oggetto funzione:

var foo = new Function("...");
    
risposta data 25.05.2012 - 04:46
fonte

Leggi altre domande sui tag