Que significa esta estructura de código en javascript? (corchetes enumerando funciones en la llamada de una función)

publicado por: Anonymous

¿Qué significa este código en Javascript?

He hecho algunos pequeños scripts en Javascript y leído bastante contenido, pero no puedo entender este código.

Está resumido porque tiene miles de líneas. Según lo que leí en Stackoverflow en inglés, agregar un signo de admiración delante de una función permite crear funciones sin nombre para ahorrar espacio que son llamadas inmediatamente.

Pero qué significa en este código los corchetes, que en la llamada a la función () se pase como parámetro docenas de definiciones de funciones encerradas entre corchetes?

Lo que está entre paréntesis sería lo que se pasa como argumento, pero no entiendo que sería lo que ejecuta si en ese argumento hay docenas de definiciones de funciones encerradas entre paréntesis.

Y lo que más raro me resulta, es que según me marca notepad++ , el corchete cierra en la mitad de la definición de una función .

! function(e) {
  // cuerpo de la función
    }
}([function(e, t, n) {
    // cuerpo de la funcion
}, function(e, t) {
   // cuerpo de la funcion
}, function(e, t, n) {
    // cuerpo de la funcion
}, function(e, t, n) {
    // cuerpo de la funcion
}, function(e, t, n) {
    // cuerpo de la funcion
}, function(e, t) {
   // cuerpo de la funcion

}, function(e, t, n) {

}, 

//... 
//n definiciones de funciones más (docenas)
//...

, function(e, t, n) {
    "use strict";

    function r(e) {
        var t = Function.prototype.toString,
            n = Object.prototype.hasOwnProperty,

            // En esta linea de abajo se encuentra el corchete que cierra , poco después del for
            r = RegExp("^" + t.call(n).replace(/[\^$.*+?()[]{}|]/g, "\$&").replace(/hasOwnProperty|(function).*?(?=\()| for .+?(?=\])/g, "$1.*?") + "$");
        try {
            var o = t.call(e);
            return r.test(o)
        } catch (i) {
            return !1
        }
    }

    // mas cuerpo de la funcion

}

solución

El signo de admiracion y otros operadores como “-” “+” etc, son usados para que el interprete reconozca la sentencia como una operacion, haciendo que la funcion se ejecute automaticamente. Luego lo que esta haciendo es pasar un array como parametro de la funcion. El array contiene funciones. Te dejo un pequeño ejemplo de como se puede acceder a esos parametros.

!function(){
  alert(arguments.length);// imprime 1
  arguments[0][0]());     // imprime 2
  arguments[0][1]());     // imprime 3
}([function(){
    alert("2");
},
function(){
    alert("3");
},]);

Lo del corchete que cierra en medio de una funcion bien puede ser un error de sintaxis o un error del parser de notepad++. Puedes intentar usando un IDE como WebStorm

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *