Soy nuevo en Javascript y me confundí por el funcionamiento de la declaración de función. Hice algunas pruebas en eso y dieron algunos resultados interesantes:declaración de función ambigua en Javascript
say();
function say()
{
alert("say");
}
El delantero-declaración trabajadas y emergente "decir"
Por el contrario
say();
say = function()
{
alert("say");
}
no funcionó, aunque también declaró un objeto de función
Si declaramos la función y redeclaramos eso después:
function say()
{
alert("speak");
}
say();
function say()
{
alert("say");
}
Recibí "decir" en lugar de "hablar". ¡Eso es sorpresa!
OK. Parece que solo funciona la última declaración de función. A continuación, vamos a declarar objeto de función primero y luego una función de "regular":
say = function()
{
alert("speak");
}
say();
function say()
{
alert("say");
}
say();
Otra sorpresa, era "hablar" seguido de "hablar". ¡La declaración de la función "normal" no funcionó en absoluto!
¿Hay una explicación de todos ellos? Y, si la declaración de la función "regular" es realmente así de "frágil" y puede anularse fácilmente por el objeto de función con el mismo nombre, ¿debería mantenerme alejado de eso?
Otra pregunta es: con solo el formato de objeto de función, ¿esa declaración directa se vuelve imposible? ¿Hay alguna forma de "simular" eso en Javascript?
que ver sus puntos. Pero, ¿cuál es el alcance si defino objetos de funciones locales? Traté de llamar window.say() y el resultado todavía no es lo que esperaba:
function say() { alert("say"); } window.say();
popup "decir" yvar say = function() { alert("speak"); } window.say(); function say() { alert("say"); } window.say();
popup "hablar" dos veces. ¿Eso significa que tanto la función "global" como el objeto "local" son miembros del objeto ventana? –lo siento, no sé cómo formatear el comentario ... :( –
@ Xiang: el motivo por el que obtienes "hablar" dos veces es que el intérprete de JavaScript hace dos pasadas: en el primero, crea propiedades del objeto Variable (que se utiliza para buscar variables en el ámbito actual y es el objeto global en código global) para declaraciones 'var' y declaraciones de funciones, y en el segundo pase ejecuta las instrucciones en orden. Lo crucial es que' var' las declaraciones se dividen efectivamente en dos: en el primer pase, se agrega una propiedad con el valor 'undefined' al objeto Variable si aún no contiene una propiedad con ese nombre (continuación ...) –