2010-03-22 10 views
6

He encontrado muchas definiciones de la declaración 'var', pero la mayoría de ellas están incompletas (por lo general, desde guías introductorias/tutoriales). ¿Debo usar 'var' si el alcance variable & ha sido declarado en la lista de parámetros?Javascript - ¿Debo usar 'var' al reasignar una variable definida en los parámetros de la función?

someFunc = function(someVar) 
{ 
    // Is it considered good practice to use 'var', even if it is redundant? 

    var someVar = cheese; 
}; 

Respuesta

15

La respuesta es no, no deberías estar haciendo esto. ¡Esto se considera una mala práctica!

JS Lint lanza el siguiente error al analizar el código de ejemplo:

Problema en la línea 5 de caracteres de 16: someVar ya está definido.

+0

¡Gracias! Esto es exactamente lo que necesitaba saber: P –

+2

* ¿Quién * lo considera "mala práctica"?Por favor, no digas "JSLint sí" (porque también dice que un buen código sin punto y coma adicional es "mala práctica"), simplemente busca algunas fuentes para respaldar el reclamo, no es que yo discuta de manera diferente ;-) –

1

No. En Javascript, puede jugar con el argumento de la función todo lo que desee.

consideran este código, que se ve en toda la Web y que se utiliza para hacer el trabajo de código en los modelos uniformes de fenómenos e IE:

function someEventHandler(event) { 
    event= (event) ? event : window.event; 
    // statements 
} 
+0

Thx, no estaba seguro de si el código anterior era correcto o coherente con las normas/estándares de idioma. –

+7

Escribiría 'event = event || || window.event; ' –

2

No, el orden en que se definen los nombres al entrar en un ámbito de ejecución es el siguiente:

  1. parámetros de la función (con valor pasado o undefined)
  2. nombre especial arguments (con valor de argumentos si no existe)
  3. declaraciones de funciones (con el cuerpo presentado)
  4. declaraciones de variables (con undefined si no existe)
  5. nombre de la función actual (con cuerpo traído a lo largo de, si no existe)

Esto significa que en este código, foo se refiere al parámetro de la función (que podría ser fácilmente cambiado):

function foo(foo) { 
    var foo; 
    alert(foo); 
} 
foo(1); // 1 

Si está utilizando una declaración de función dentro de foo, ese cuerpo anulará todos los demás. Además, tenga en cuenta que esto significa que puede hacer esto:

function foo(arguments) { 
    alert(arguments); 
} 
foo(); // undefined 
foo(1); // 1 

No haga eso.

4

"He encontrado muchas definiciones de la declaración 'var' pero la mayoría están incompletas."

Pruebe esto (un poco tapado pero con suerte completo :-)): la palabra clave var declara una nueva variable y la vincula al alcance léxico actual. En otras palabras, la variable no existirá fuera de la función que lo declara. Los parámetros de función están implícitamente vinculados al alcance de esa función, por lo que no requieren la palabra clave var.

Cuestiones relacionadas