valor - pasar parametros a una funcion javascript desde html
declaraciones de alcance de funciones de JavaScript (4)
Las declaraciones de funciones siempre son locales al alcance actual, como una variable declarada con la palabra clave var
.
Sin embargo, la diferencia es que si se declaran (en lugar de asignarse a una variable) su definición se iza , por lo que serán utilizables en cualquier lugar del alcance, incluso si la declaración viene al final del código. Ver también var functionName = function () {} vs function functionName () {} .
La palabra clave var
en javascript hace que una variable se almacene en el ámbito local. Sin variables var
pertenecen al alcance global. ¿Qué hay de las funciones? Está claro qué sucede cuando las funciones se declaran como variables
var foo = function() {...}
pero qué alcance hace
function foo() {...}
¿pertenece a?
EDIT: me di cuenta de que no hice la pregunta correcta para hacer un seguimiento. En el anidado más externo, ¿hay alguna diferencia entre las dos declaraciones anteriores y la siguiente declaración?
foo = function() {...}
Notable distinción teniendo en cuenta los globales globales implícitos:
var foo = function() {
// Variables
var myVar1 = 42; // Local variable
myVar2 = 69; // Implicit global (no ''var'')
// Functional Expressions
var myFn1 = function() { ... } // Local
myFn2 = function() { ... } // Implicit global
function sayHi() {
// I am a function declaration. Always local.
}
}
Espero que eso aclare un poco. Los globales implícitos se definen si olvida una var
antes de su asignación. Es un peligro peligroso que se aplica a declaraciones variables y expresiones funcionales.
Pertenece al alcance actual , siempre. Por ejemplo:
// global scope
// foo is a global function
function foo() {
// bar is local to foo
function bar() {
}
}
En cuanto a tu segunda pregunta, esto:
foo = function() {...}
es una expresión de función anónima asignada a una variable global (a menos que esté ejecutando el modo estricto, entonces foo
no estaría definido). La diferencia entre eso y la function foo() {}
es que este último es una declaración de función (frente a una declaración de variable , a la que se le asigna una expresión de función anónima).
Puede que le interese este excelente artículo sobre declaraciones de funciones y expresiones de funciones: expresiones de funciones nombradas desmitificadas .
Su primer ejemplo ( var foo = function() {...}
) se llama función anónima. Se declara dinámicamente en tiempo de ejecución y no sigue las mismas reglas que una función normal, pero sigue las reglas de las variables.