Tinselcity

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

whys:var-and-let [2018/04/14 04:13]
flynn created
whys:var-and-let [2018/04/14 04:31] (actual)
flynn translation
Línea 1: Línea 1:
-**TRANSLATION PENDING**+====== Why do both var and let exist? ======
  
-====== ¿Por qué existen tanto var como let? ======+> **Question**: Why do both ''var'' and ''let'' exist? And as a bonus question: Couldn't we just keep ''let''?
  
-> **Pregunta**: ¿Por qué existen tanto ''var'' como ''let'' en JavaScript? Y como pregunta de bonus: ¿No podríamos quedarnos solo con ''let''?+===== Retro-compatibility =====
  
-===== Retro-compatibilidad =====+Initially ''var'' existed. The scope of names was delimited by functions (i.e. there was no block-level scope). And also the design of the language included that before execution an initial lexcial analysis pass would recollect (//hoist//) all [[https://en.wikipedia.org/wiki/Forward_declaration|name]] declarations (variables, functions).
  
-Inicialmente existía ''var''El alcance de las variables se delimitaba solo a nivel de función (i.e. no existía alcance de bloque (un bucleun condicional...))Y además el diseño del lenguaje indicaba que la ejecución tenía una primera pasada de análisis léxico en la que se //recolectaban// (//hoisting//) todas las **definiciones** de [[https://en.wikipedia.org/wiki/Forward_declaration|nombres]] (variables y funciones).+Everyone lived happily in the woods... Well, no. There was a number of grumpy rabbits angry about two things. Una was block-level scopewhich, for some reason, they felt they needed it for... somethingAnd then there was that thing on //hoisting// that made some of them cry while confusing others when it was mentioned, even though they might not have noticed too much about it in daily use.
  
-Todos en el bosque eran felices... Bueno, no, había bastantes conejos malhumorados con dos temasUno era el tema del alcance de bloqueque por algún motivo parece que lo necesitaban para... algo. Y luego estaba el tema del //hoisting// que por un lado hacía llorar a algunos y por otroaunque no se hubieran percatado excesivamente de su existenciaconfundía otros cuando lo oían nombrar.+So, after a number of years, ''let'' was introduced as an alternative that allows delimiting scope to blocks and didn't "suffer //hoisting//"... Well, no, not reallyTo make it fit with the philosophy of JavaScript''let'' simulates that there is no hoisting, even though there isby introducing TDZ ((Temporal Dead Zone)) to enforce //forward declaration//.
  
-Asídespués de muchos años se introdujo ''let'' como un apañ^H^H^H^Halternativa que permitía restringir el alcance a bloques y que no "sufría //hoisting//"... Bueno, no, para hacer que encaje con la filosofía del lenguaje, ''let'' simula que no hay recolecciónaunque sí la hayahaciendo un juego de manos con la recolección introduciendo una TDZ ((Temporal Dead Zone)) para imponer la //forward declaration//.+Okbut, couldn't we just have ''let'' (or modify ''var'' to behave like ''let'' and just keep one word)? Noof course not. On the one handthere's retro-compatibility and not suddenly breaking half (or moreof the sites in the world just because you don't like having two options. And on the other, ''let'' introduces its own concerns (e.g. there's an unavoidable 5-10x performance hit; and the use of TDZs doesn't seem like an ideal situation).
  
-Ahora bien, ¿no podríamos entonces quedarnos solo con ''let'' (o simplemente cambiar el comportamiento de ''var'' sin introducir una nueva palabra)? No, claro que no. Por un lado está el tema de la retro-compatibilidad y de no romper automáticamente la mitad o más de las páginas web del mundo solo porque te moleste que haya dos palabras en lugar de una. Por otro, ''let'' introduce sus propias preocupaciones (el rendimiento, por ejemplo, es inevitablemente entre 5 y 10 veces peor; y el uso de las TDZs tampoco parece la solución perfecta). +Some may prefer ignoring this and telling everyone that they should always use ''let'' or else they are bad persons. ''¯\_(ツ)_/¯''
- +
-Hay quien prefiere ignorar esto y decir que desde ya todo el mundo debería usar siempre ''let'' y que quien use ''var'' es una mala persona. ''¯\_(ツ)_/¯''+