| |||
Respuesta: Argumentos a una funcion event handler Cita: function registrarHandler(node, event, handler) { if (typeof node.addEventListener == "function") node.addEventListener(event, handler, false); else node.attachEvent("on" + event, handler); } escribe = function (arg1, arg2){ .................. }; registrarHandler(document.getElementById("d1"), "mouseover", escribe(par1, par2)); Ese codigo en algun lugar de body, ejecuta escribe sin que se dispare el evento, al inicio de la carga.... ¿porque? |
| ||||
Respuesta: Argumentos a una funcion event handler buenas, la razón por la que se ejecuta el handler sin que se inicie el evento es porque estás invocando la función. fíjate que al invocar registrarHandler, en el tercer argumento estas invocando la función o handler. en este caso, puesto que la función escribe recibe dos argumentos, debes pasar como handler una función que invoque a escribe.
Código:
registrarHandler(document.getElementById("d1"), "mouseover", escribe(par1, par2)); // ahí se invoca escribe ; registrarHandler(nodo, event, function(){ escribe(arg1, arg2); }); // se le pasa como handler una función que invoca a escribe ;
__________________ la maldad es una virtud humana, y la espiritualidad es la lucha del hombre contra su maldad. |
| |||
Respuesta: Argumentos a una funcion event handler vale, es que cuesta entender un poco esto hata que lo pillas. Esto que dices es porque: escribe() ...se invoca la funcion y lo devuelto por esta expresion es lo que devuelva la funcion. y function escribe() {...} (que tiene que ir antes que escribe(), en su caso) devuelve un objeto funcion. Hazme cualquier correcion que te parezca. Gracias. |
| ||||
Respuesta: Argumentos a una funcion event handler no estoy seguro de haber entendido el análisis de tu primer punto. en este caso, al invocar escribe, la función registrarHandler utiliza como handler cualquier cosa que haya sido devuelta por la función escribe — aparentemente undefined. pudistes haber pasado el identificador de la función —escribe— pero los argumentos recibidos probablemente no sean los que necesitas en la función. sobre el segundo punto; cierto que las funciones son objetos tipo Function. sin embargo, no es necesariamente cierto que la definición de la función esté antes que su invocación. todo dependerá de como declares la función: function expression o function declaration.
Código:
en este ejemplo, nótese que la primera instrucción devuelve undefined pese a que antes de dicha línea no existe declaración alguna del identificador fn. esto es porque javascript, cuando entra en el contexto de un scope reserva todos los identificadores de variables explícitas (iniciados con var) y de funciones declarada con la instrucción function (ver próximo ejemplo). en este caso, javascript automáticamente asigna como valor undefined a los identificadores. si descomenta la tercera línea (la que invoca la función fn) en la consola debes ver que se genera un error.// function expresssion ; console.log(typeof fn); // undefined; // console.log(typeof fn()); // genera error de TypeError: undefined is not a funcion ; var fn = function(){ return 0; }; console.log(typeof fn); // function;
Código:
en este caso particular, cuando javascript entra en el contexto del scope, las funciones declaradas se crean primero. es por ello que la primera línea muestra function en la consola. // function declaration ; console.log(typeof fn); // function ; console.log(typeof fn()); // number ; function fn(){ return 0; } // nótese la diferencia con el ejemplo anterior ; console.log(typeof fn); // function ;
__________________ la maldad es una virtud humana, y la espiritualidad es la lucha del hombre contra su maldad. |
Etiquetas: |