tipos - llamar funcion javascript
Una var por funciĆ³n en JavaScript? (4)
Básicamente, en los bloques de JavaScript ( { ... }
) no se introduce un nuevo ámbito, solo existe el ámbito de la función, por lo que no se crea ámbito en ninguna otra declaración.
Una variable introducida en cualquier lugar de una función es visible en todas partes de la función.
Por ejemplo:
function myFunction(){
var one = 1;
if (one){
var two = one + 1;
}
(function () {
var three = one + two;
})();
// at this point both variables *one* and *two* are accessible but
// the variable *three* was declared in the scope of a inner function
// and is not accessible at this point.
}
En los lenguajes con ámbito de bloque, se recomienda declarar las variables en el punto de primer uso, pero como JavaScript no tiene ámbito de bloque, es mejor declarar todas las variables de una función en la parte superior de la función.
Revisa este article .
He estado usando JSLint para hacerme sentir mal con mi JavaScript. Es genial, por cierto. Hay un cheque que no entiendo del todo y me gustaría su opinión, por favor.
De jslint.com :
En los idiomas con alcance de bloque, generalmente se recomienda que las variables se declaren en el sitio de primer uso. Pero como JavaScript no tiene alcance de bloque, es más prudente declarar todas las variables de una función en la parte superior de la función. Se recomienda utilizar una única declaración var por función.
¿Qué dice realmente la última frase en negrita? Creo que debería estar declarando múltiples variables como esta?
var foo = 1, bar = 2;
Y, ¿es la parte "sabia" solo un estilo de programación para desalentar los errores más adelante o hay más que eso?
Gracias por tu ayuda.
El problema es que, ya sea que se dé cuenta o no, javascript mueve invisiblemente todas las declaraciones var a la parte superior del alcance de la función.
así que si tienes una función como esta
var i = 5;
function testvar () {
alert(i);
var i=3;
}
testvar();
la ventana de alerta contendrá indefinido. porque internamente, se ha cambiado a esto:
var i = 5;
function testvar () {
var i;
alert(i);
i=3;
}
testvar();
esto se llama "elevación". La razón por la que Crockford defiende tan firmemente que las declaraciones de var van en la parte superior, es que hace que el código se ajuste visiblemente a lo que va a hacer, en lugar de permitir que ocurra un comportamiento invisible e inesperado.
La falta de alcance del bloque explica el siguiente código:
var a = 1;
if (something) {
var a = 2;
}
alert(a); // Alerts "2"
En la mayoría de los lenguajes estilo C (como en la sintaxis), la definición var a = 2
definiría ''a'' solo para el alcance del bloque if
. Usar una sola instrucción var en la parte superior de la función ayuda a evitar esta peculiaridad de Javascript, que no siempre es tan obvio como el anterior, y sería inesperado para los programadores C / C # / Java.
Sí, significa que declaras todas las variables al principio de la función. Si desea hacerlo en una línea o en varias líneas es una cuestión de elección.
La razón se explica en el párrafo que mencionaste. Las variables Javascript solo tienen alcance de nivel de función. Si declara la misma variable dentro de un bloque if / while / for, se sobrescribirá con el nuevo valor ya que el bloque no tiene un nuevo alcance. Esto es diferente de idiomas como Java. Para evitar tales sorpresas, declare todas las variables que va a usar en la función al comienzo de la función para que no "redeclare" accidentalmente y nada.