Entiendo por qué var
toma ese nombre, es variable, const
es una constante, pero ¿cuál es el significado detrás del nombre let
, que abarca el bloque actual? ¿Déjalo ser?
javascript
ecmascript-6
let
Vitaly Zdanevich
fuente
fuente
LET
. Puede haber ejemplos de idiomas anteriores.LET
se describe en la página 7 del primer borrador del manual, con fecha de mayo de 1964, pdf aquí .const
es una referencia de objeto constante o inmutable (solo lectura) donde el objeto en sí todavía es mutable. P.ej. Después de la declaración / asignaciónconst foo = ['bar']
,foo.push('bat')
aún sería legal, perofoo = ['bar', 'bat']
no lo es. Pero eso es demasiado escribir.Respuestas:
Let es una declaración matemática que fue adoptada por los primeros lenguajes de programación como Scheme y Basic. Las variables se consideran entidades de bajo nivel que no son adecuadas para niveles superiores de abstracción, por lo tanto, el deseo de muchos diseñadores de idiomas de introducir conceptos similares pero más potentes como en Clojure, F #, Scala, donde
let
podría significar un valor o una variable que se puede asignar, pero no cambiado , lo que a su vez permite que el compilador detecte más errores de programación y optimice mejor el código.JavaScript ha tenido
var
desde el principio, por lo que solo necesitaban otra palabra clave, y solo tomaron prestados de docenas de otros idiomas quelet
ya usan como palabra clave tradicional lo más cercavar
posible, aunque en JavaScriptlet
crea una variable local de alcance de bloque en su lugar.fuente
len('var') === len('let')
, lo que significa que tus declaraciones se alinean muy bien en tu editor de cualquier manera. Todavía no he encontrado nada que sugiera que esto fue deliberado, pero puede ser a) visualmente agradable y más legible, o b) horriblemente molesto de depurar si mezclas los dos (lo que parece una mala idea de todos modos, pero yo ' Lo he visto hecho).let
se ha usado tradicionalmente para describir una constante, yalet C = the speed of light
que Javascript decidió usar let para describir una variable con alcance no estándar y al mismo tiempo introducir otra palabra clave para constantes.let
esté cercavar
. También Scala no usa,let
así que no veo cómo es relevante.Supongo que sigue la tradición matemática. En matemáticas, a menudo se dice "sea x un número real arbitrario" o algo así.
fuente
Además de la respuesta de exebook , el uso matemático de la palabra clave también permite encapsular bien las implicaciones de alcance
let
cuando se usa en Javascript / ES6. Específicamente, así como el siguiente código ES6 no conoce la asignación entre paréntesis detoPrint
cuándo imprime el valor de'Hello World'
,dejar como se usa en las matemáticas formalizadas (especialmente la escritura de pruebas) indica que la instancia actual de una variable existe solo para el alcance de esa idea lógica. En el siguiente ejemplo, x inmediatamente adquiere una nueva identidad al ingresar a la nueva idea (por lo general, estos son conceptos necesarios para probar la idea principal) y vuelve inmediatamente a la x anterior al concluir la sub-prueba. Por supuesto, al igual que en la codificación, esto se considera algo confuso y, por lo general, se evita eligiendo un nombre diferente para la otra variable.
Deje x ser tal y tal ...
Cosas de prueba
Nueva idea {Sea x otra cosa ... pruebe algo} Concluya una nueva idea
Demuestre la idea principal con la vieja x
fuente
let
se trata en absoluto.let
se trata de alcance.let
me hace pensar en algo como esto que está sucediendo en la mente del escritor del código, "Ok, por solo este momentolet foo = bar
, pero luego puede volver a su valor original o dejar de serlo. Esto se ilustra claramente en los ejemplos para Block Scope y Redeclaring Variables en esta presentación de W3Schools delet
. Nuevamente, no pretendiendo traer una respuesta científica de algún tipo, sino compartiendo esto más como un dispositivo mnemónico para recordar cuándo quiero usarlet
.toPrint
que solo existe dentro del bloque , y luego descarta esa variable cuando termina el bloque. Y al salir, volvemos al ámbito externo, donde lo internotoPrint
ya no existe, por lo que seconsole.log(toPrint)
refiere a lo externotoPrint
. No se ignora nada, es solo que laslet
variables tienen vidas finitas definidas por su alcance.Hace exactamente lo que
var
hace con una diferencia de alcance. Ahora no puede tomar el nombrevar
ya que ya está en uso.Por lo tanto, parece que ha tomado el siguiente mejor nombre que tiene una semántica en una construcción interesante del idioma inglés.
En inglés dice "Deja que mi mascota sea un perro"
fuente
A$="HELLO WORLD"
) Los intérpretes involucrados incluyeron Rockwell AIM 65 BASIC, Atari Basic, MBASIC 5 en CP / M, Applesoft BASIC e incluso BASCOM, el compilador MS BASIC en CP / M. VAX BASIC tenía LET, pero no lo requiero, según recuerdo. La memoria era escasa en ese entonces, y los 3 o 4 caracteres adicionales del texto del programa por declaración marcaron la diferencia, especialmente en los programas "grandes".La posibilidad más probable es que fue la elección más idiomática. No solo es fácil de hablar, sino más bien intuitivo de entender. Algunos podrían discutir, incluso más que eso
var
.Pero creo que hay un poco más de historia en esto.
De Wikipedia :
Me gustaría creer que esto también fue una inspiración, para
let
Javascript.fuente
LET
en BASIC, desde 1964.let
a JavaScript. No completamente falso, hasta donde llega, pero sin ningún significado real. (Y de ninguna manera descarta la posibilidad de que el uso de Scott de "let" también haya sido inspirado por BASICLET
.)Let utiliza un alcance limitado de nivel de bloque más inmediato, mientras que var es típicamente el alcance de la función o el alcance global.
Parece que let fue elegido con mayor probabilidad porque se encuentra en muchos otros idiomas para definir variables, como BASIC y muchos otros.
fuente
Creo que el endeudamiento de JavaScript con Scheme es obvio aquí. El esquema no solo tiene let, sino que también tiene valores *, let *, sintaxis let y valores let. (Ver, El lenguaje de programación del esquema, 4ª ed.).
((La elección agrega más credibilidad a la noción de que JavaScript es Lispy, pero, antes de dejarnos llevar, no es homicónico))))
fuente
También podría significar algo así como "léxico Tipo Medio Ambiente o atado" .. Me molesta que simplemente sería "dejar que esta sea que ". Y dejar que rec no tenga sentido en el cálculo lambda.
fuente