variable que funciona ejemplos definicion como caracteristicas javascript variables redeclaration

que - ¿Hay algún propósito para redeclar las variables de JavaScript?



javascript que es (9)

Soy nuevo en JavaScript.

<html> <body> <script type="text/javascript"> var x=5; document.write(x); document.write("<br />"); var x; document.write(x); </script> </body> </html>

El resultado es:

5 5

Cuando x se declara la segunda vez, no debe definirse, pero conserva el valor anterior. Explique si esta redeclaración tiene algún propósito especial.


entonces cuando la segunda vez cuando su x declarada debe ser indefinida

¿Qué parte de la especificación dice esto?

"Comportamiento indefinido" no significa "la variable no estará undefined ".


Además, un programador puede querer usar var para localizar una variable:

<script> var x= ''this is global x''; function my_x() { var x= ''localized x''; alert(x); } my_x(); alert(x); </script>


Dentro del mismo ámbito , es totalmente innecesario "redeclarar" una variable.


En lo que respecta a mi comprensión de javascript, el uso de la palabra clave var es completamente opcional en el ámbito global . Es una historia diferente para las funciones.

Cuando esté dentro de una función, use la palabra clave var para indicar que la variable es local para la función (en lugar de ser global por defecto).

Yo personalmente uso var en el alcance global para mostrar que una variable se declara y / o utiliza por primera vez.

Puede consultar http://www.w3schools.com/js/js_variables.asp para obtener más información.


Esa segunda var x es totalmente superflua.


Nunca debe volver a declarar una variable dentro del mismo ámbito, si realmente desea cambiar esto y luego asignarlo. No es necesario volver a publicarlo para crear un objeto diferente en este lenguaje dinámico, si quiere que x sea una cadena, simplemente asigne:

x = "hello";

No es necesario que lo restablezca a undefined o redeclare primero.

Tenga en cuenta que cambiar el tipo de variable no es una práctica muy buena en la mayoría de las situaciones, simplemente indicando que es una posibilidad si eso es lo que necesita.


Realmente no estás volviendo a declarar la variable.

La declaración de variable en JavaScript está sujeta a elevación, lo que significa que se evalúan en el tiempo de análisis y más tarde en el tiempo de ejecución se realizan las asignaciones.

Tu código al final de la fase de análisis, antes de la ejecución se ve así:

var x; x = 5; document.write(x); document.write("<br />"); document.write(x);


var solo no realiza una tarea. Solo indica que cuando usa el nombre de la variable en todo el ámbito en el que se produce la var , está hablando de una variable local y no global (el controvertido valor predeterminado). La var se detecta cuando la función se analiza y mantiene en todo ese ámbito, por lo que donde la pones es irrelevante:

var a= 0; function foo() { a= 1; return a; var a; } var b= foo(); alert(''global a=''+a+'', local a=''+b);

Los resultados en global a= 0, local a= 1 : a pesar de que la sentencia var nunca se alcanza en el curso de la ejecución de foo() , sigue siendo efectiva para hacer a variable local.

Entonces, declarar var x por segunda vez en el mismo ámbito es completamente redundante. Sin embargo, a veces puede hacerlo, generalmente cuando reutiliza un nombre de variable local para un segundo uso independiente dentro de la misma función. Más comúnmente:

for (var i= 0; i<onething.length; i++) { ...do some trivial loop... } for (var i= 0; i<anotherthing.length; i++) { ...do another trivial loop... }

Aunque sin duda podría omitir la segunda var , y las herramientas como jslint exigirían que lo haga, en realidad podría no ser una buena idea.

Imagine que más tarde cambia o elimina el primer ciclo para que ya no declare que i sea var . Ahora el segundo bucle restante cambia repentinamente el significado de una variable local a una global. Si no se da cuenta al actualizar el primer bucle, el segundo bucle tiene una dependencia oculta sobre él (y es muy posible que no lo note dado que los ojos eluden el patrón for(...=0 ; ...<...; ...++) en "oh, eso es solo un iterador estándar"), tienes un problema sutil y molesto para depurar.


Recientemente escribí código como:

var obj1 = get_an_object(); var v = obj1.get_velocity(); v += changes_in_velocity(); obj1.set_velocity(v); var obj2 = get_an_object(); var v = obj2.get_velocity(); v += changes_in_velocity(); obj2.set_velocity(v);

(El código real era más complicado y menos repetitivo)

En lo que respecta al navegador, la segunda var v fue redundante e inútil. Para mí, sirvió dos propósitos. Me dijo que olvidara todo lo que sabía sobre el viejo v , porque este era un nuevo uso. Y significaba que podía reordenar el código, o comentar la primera mitad, sin romper las cosas.