disponibilidad comandos clusvcadm cluster alta javascript iife

javascript - comandos - clusvcadm



La función de auto ejecución de Javascript "no es una función" (6)

Yo tengo:

var Init = (function() { my js goes here })();

Y mi js se ejecuta correctamente cuando se carga la página. Tambien tengo:

$(''form :checkbox'').change(function() { Init(); });

Pero firebug dice que Init no es una función.


No es una función.

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

Evalúa la función anónima en ese momento . Y el resultado de la evaluación aparentemente no devuelve un objeto de función en este caso :-)

Considerar:

f = (function() { return "not a function :(" })() alert(f())

y

f = (function() { return function () { return "Yay!" } })() alert(f())

Feliz codificacion :)

Aquí hay una función que "ejecutará algo una vez" y luego "devolverá algo para ejecutar más tarde". (Consulte "Puede [asignar] una función o llamarla; no puede hacer las dos cosas ..." de la respuesta de Slaks). Sin embargo, no lo haría así.

Init = (function () { function Init () { alert("whee!") } Init() return Init })() Init()

Aquí hay otra solución (mucho más corta / más limpia) de CD Sanchez (ver comentario) que aprovecha el hecho de que una asignación se evalúa al valor asignado:

var Init; (Init = function Init () { alert ("wee"); })()


Para que Init ejecute como una función, su código dentro de la función de ejecución automática debe devolver una función, y la única razón para hacerlo es si necesita construir una función específica de forma dinámica que dependa de algunos estados de datos:

var Init = (function() { // some code return function () { // some dynamic code dependent upon your previous code }; }());


Podrías hacer lo anterior, pero también podrías hacerlo.

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

No hay nada que le impida tener una función autoejecutable con nombre. Si desea evitar tener una función llamada Init, puede hacer lo que CD Sanchez sugirió y asignarlo en la ejecución.

Los (); Al final lo hace auto ejecutable. Envolver la función entre paréntesis la hace anónima. Pero parece que no quieres que sea anónimo.


Puedes intentar declararlo de esta manera:

(function Init(){ /*...*/ })();

Pero esto reducirá el uso de esta función en su cuerpo.

Otra forma es separar declaración de ejecución:

var Init = function(){ /*...*/ }, initResult = (function(){ return Init(); })();


Rápido Intenta reemplazar así

var Init = function() { my js goes here });

y en la llamada de llamada Init


Init no es una función; Es el resultado de llamar a la función.

Puedes crear una función o llamarla; No puedes hacer las dos cosas a la vez.

Técnicamente, podría arreglarlo agregando return arguments.callee; para devolver la función de la llamada.
Sin embargo, esa es una idea tonta.

Probablemente no deberías estar llamando a la función; Necesitas entender lo que quieres que haga tu código.