¿Cuál es el nombre de una función de no llamada automática?

6

Tengo una colección de funciones normales y funciones de auto llamada dentro de un archivo javascript. En mis comentarios, quiero decir algo como "Este script puede contener funciones de llamada automática y de XXX", donde XXX es la función de no llamada automática.

"Estático" viene a mi mente, pero siento que sería incorrecto debido al uso de métodos estáticos en PHP, que es algo completamente diferente.

Alguien tiene alguna idea? Gracias!

    
pregunta Alan Lapington 24.05.2012 - 18:02

4 respuestas

44

Primero, las "funciones de llamada automática" no son en realidad llamada automática. Sé que eso es lo que la gente de la comunidad de Javascript los llama, pero es realmente engañoso; las funciones nunca se refieren a sí mismas, y de hecho muchas veces no hay forma de llamar a esa función en particular más de una vez. Si fueran en realidad funciones de auto llamada, entonces las funciones recursivas habrían sido la mejor manera de nombrarlas.

Lo que realmente tiene son (generalmente) lambdas ejecutados de inmediato cuyos resultados se almacenan en una variable para limitar el alcance de sus aspectos internos. "IEL" no es tan llamativo como las "funciones de auto llamada", por lo que supongo que es por eso que el nombre real nunca se conoce.

Sin embargo, la cosa es que es un nivel demasiado bajo; es un detalle de implementación que a nadie le importa (es como decir "aquí estén los bucles"). Generalmente, cuando estás usando esas funciones de ejecución inmediata, la razón por la que las estás utilizando es porque estás creando una especie de módulo, que necesita su propio espacio de nombres.

Si ese es el caso, entonces en lugar de decir "funciones autoejecutables", debes decir "este script contiene módulos que contienen < stuff >". De lo contrario, debería averiguar qué está tratando de hacer con las funciones y decir que es lo que está en su script.

Ahora, la razón por la que usas módulos en Javascript es porque, de lo contrario, todo entra en el ámbito global. Esas otras funciones que estás escribiendo, que no estarán dentro de los módulos (o lo que decidas que son), terminarán ahí. Entonces, use eso: "este archivo de script contiene ambos módulos que hacen < stuff > y funciones globales que hacen que < more stuff >".

    
respondido por el Tacroy 24.05.2012 - 19:46
21

Respuesta revisada

Bien, veo lo que quieres decir. No llamaría a esas "funciones de auto llamada", lo primero que me viene a la mente es "funciones invocadas de inmediato". El "módulo" también funcionaría, pero no estoy seguro de cuán fácilmente se entenderá.

En lugar de hablar de las funciones de "autollamada" y de "no autollamada", documentaría el script explicando qué miembros agrega al espacio de nombres global.

Por ejemplo, si sus funciones invocadas inmediatamente configuran algunos objetos, describa esos objetos. Básicamente, describa cómo se ve el mundo después de que se haya ejecutado el script, no cómo lo hace el script hasta ese punto.

Respuesta original

Dado que "autoclamación" generalmente significa "recursivo", solo diría: "Este script puede contener funciones recursivas y no recursivas".

    
respondido por el Daniel Pryden 24.05.2012 - 18:10
13

Tal vez sean las funciones de auto llamada que deberían llamarse algo diferente, como "recursiva". Tal vez algo como "Este script puede contener funciones recursivas y no recursivas".

    
respondido por el Kevin Hsu 24.05.2012 - 18:09
-2

Esta es una función:

function foo() {
    ...
}

Este es un constructor:

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

Este es un método:

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

Este es un método estático:
realmente es más una sintaxis pseudoestática para personas acostumbradas a lenguajes como Java y C #

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

Esta es una función privada:

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

Esta es una función anónima:

function () {
    ...
}

Esta es una Experssion de función invocada de forma inmediata :

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

Esta es una función recursiva:

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

Este es un objeto de función:

var foo = new Function("...");
    
respondido por el zzzzBov 25.05.2012 - 04:46

Lea otras preguntas en las etiquetas