En su ejemplo, sólo tiene dos estados y es equivalente a:
function foo(bar){
return bar;
}
0;
Esto es no una función autoinvocada. La primera declaración es una declaración de función , la segunda instrucción es simplemente el número literal 0
, que no hace nada. Los paréntesis no ejecutan la función, son grouping operator.
¿Cómo podemos probar esto? Pruebe:
function foo(bar){
return "bar";
}(0);
y dígame cuál es el resultado.
que sería una función de auto-invocando, si tuviéramos una expresión función. Para eso puede usar el operador de agrupación para forzar que se evalúe como expresión.
Por ejemplo:
(function foo(bar){
return bar;
})(0);
Esta es una expresión de la función llamada. El resultado de la expresión ((function ....)
) es una referencia de función y (0)
ejecuta la función, pasando 0
como argumento.
La posición del paréntesis también podría ser:
(function foo(bar){
return bar;
}(0));
Tal vez esto es lo que han visto.
Esta técnica fue ya ampliamente discutido aquí: What is the purpose of a self executing function in javascript?
Si acaba de proporcionar un mal ejemplo, entonces la pregunta es un duplicado de (http [¿Qué paréntesis que rodean una función/declaración de objeto JavaScript/clase significan?]: //stackoverflow.com/questions/440739/what-do-parentheses-surrounding-a-javascript-object-function-class-declaration-m). –