Je comprends pourquoi var
prend ce nom - il est variable, const
- c'est une constante, mais quelle est la signification derrière le nom let
, qui s'étend au bloc actuel? Laisse faire?
javascript
ecmascript-6
let
Vitaly Zdanevich
la source
la source
LET
. Il pourrait y avoir des exemples de langues antérieures.LET
est décrite à la page 7 du premier projet du manuel, daté de mai 1964, pdf ici .const
s'agit d'une référence d'objet constante ou immuable (en lecture seule) où l'objet lui-même est toujours modifiable. Par exemple. Après déclaration / assignationconst foo = ['bar']
, cefoo.push('bat')
serait toujours légal, mais cefoo = ['bar', 'bat']
n'est pas le cas. Mais c'est trop taper.Réponses:
Let est une déclaration mathématique qui a été adoptée par les premiers langages de programmation comme Scheme et Basic. Les variables sont considérées comme des entités de bas niveau ne convenant pas à des niveaux d'abstraction plus élevés, d'où le désir de nombreux concepteurs de langage d'introduire des concepts similaires mais plus puissants comme dans Clojure, F #, Scala, où
let
pourrait signifier une valeur ou une variable qui peut être affectée, mais pas modifié , ce qui permet au compilateur de détecter plus d'erreurs de programmation et d'optimiser le code mieux.JavaScript a eu
var
depuis le début, donc ils avaient juste besoin d'un autre mot-clé, et ont simplement emprunté à des dizaines d'autres langages qui utilisentlet
déjà comme mot-clé traditionnel aussi prèsvar
que possible, bien qu'en JavaScriptlet
crée à la place une variable locale de portée de bloc.la source
len('var') === len('let')
, ce qui signifie que vos déclarations s'alignent bien dans votre éditeur de toute façon. Je n'ai encore rien trouvé pour suggérer que c'était délibéré, mais cela peut être a) visuellement agréable et plus lisible, ou b) horriblement ennuyeux à déboguer si vous mélangez les deux (ce qui semble de toute façon une mauvaise idée, mais je '' Je l'ai vu faire).let
a été traditionnellement utilisé pour décrire une constante, carlet C = the speed of light
Javascript a donc décidé d'utiliser let pour décrire une variable avec une portée non standard et en même temps d'introduire un autre mot clé pour les constantes.let
est prochevar
. De plus, Scala n'utilise pas,let
donc je ne vois pas en quoi c'est pertinent.Je suppose que cela suit la tradition mathématique. En mathématiques, on dit souvent "que x soit un nombre réel arbitraire" ou comme ça.
la source
En plus de la réponse de exebook , l'utilisation mathématique du mot clé let résume également bien les implications de la portée
let
lorsqu'il est utilisé dans Javascript / ES6. Plus précisément, tout comme le code ES6 suivant n'a pas connaissance de l'affectation entre accoladestoPrint
lorsqu'il imprime la valeur de'Hello World'
,let tel qu'il est utilisé dans les mathématiques formalisées (en particulier l'écriture de preuves) indique que l'instance actuelle d'une variable n'existe que pour la portée de cette idée logique. Dans l'exemple suivant, x acquiert immédiatement une nouvelle identité en entrant dans la nouvelle idée (ce sont généralement des concepts nécessaires pour prouver l'idée principale) et revient immédiatement à l'ancien x à la fin de la sous-preuve. Bien sûr, tout comme dans le codage, cela est considéré comme quelque peu déroutant et est donc généralement évité en choisissant un nom différent pour l'autre variable.
Soit x tel ou tel ...
Trucs de preuve
Nouvelle idée {Que x soit autre chose ... prouve quelque chose} Conclure une nouvelle idée
Prouver l'idée principale avec l'ancien x
la source
let
du tout le cas.let
est une question de portée.let
me fait penser à quelque chose comme ça qui se passe dans l'esprit du rédacteur de code, "Ok, juste pour ce momentlet foo = bar
, mais alors il peut revenir à sa valeur d'origine ou cesser d'être. Ceci est parfaitement illustré dans les exemples pour Block Scope et Redeclaring Variables dans cette présentation de W3Schools delet
. Encore une fois, ne prétendant pas apporter une réponse scientifique quelconque, mais la partageant davantage comme un moyen mnémotechnique pour se souvenir quand je veux l'utiliserlet
.toPrint
qui n'existe que dans le bloc , puis jette consciencieusement cette variable lorsque le bloc se termine. Et à la sortie, nous sommes de retour dans la portée extérieure, où l'intérieurtoPrint
n'existe plus,console.log(toPrint)
fait donc référence à l' extérieurtoPrint
. Ce n'est pas que quelque chose soit ignoré, c'est juste que leslet
variables ont des durées de vie finies définies par leur portée.Il fait exactement ce que
var
fait une différence de portée. Maintenant, il ne peut pas prendre le nomvar
car c'est déjà pris.Il semble donc qu'il a pris le meilleur nom suivant qui a une sémantique dans une construction intéressante en langue anglaise.
En anglais, il est dit "Que mon animal soit un chien"
la source
A$="HELLO WORLD"
) Les interprètes impliqués incluaient Rockwell AIM 65 BASIC, Atari Basic, MBASIC 5 sur CP / M, Applesoft BASIC et même BASCOM, le compilateur MS BASIC sur CP / M. VAX BASIC avait le LET, mais ne l'exigeait pas, si je me souviens bien. La mémoire était alors restreinte et les 3 ou 4 caractères supplémentaires du texte du programme par instruction faisaient une différence, en particulier dans les "gros" programmes.La possibilité la plus probable était qu'il s'agissait du choix le plus idiomatique. Non seulement il est facile à parler, mais plutôt intuitif à comprendre. Certains pourraient argumenter, encore plus que
var
.Mais je pense qu'il y a un peu plus d'histoire à ce sujet.
De Wikipédia :
J'aimerais croire que c'était aussi une inspiration, pour le
let
Javascript.la source
LET
dans BASIC, à partir de 1964.let
JavaScript. Pas complètement faux, pour autant que cela va, mais sans réelle signification. (EtLET
Let utilise une portée limitée de niveau bloc plus immédiate alors que var est généralement une portée de fonction ou une portée globale.
Il semble que let ait été choisi très probablement parce qu'il se trouve dans de nombreux autres langages pour définir des variables, telles que BASIC, et bien d'autres.
la source
Je pense que l'endettement de JavaScript envers Scheme est évident ici. Le schéma a non seulement let, mais a let *, let * -values, let-syntax et let-values. (Voir, The Scheme Programming Language, 4e éd.).
((Le choix ajoute plus de crédibilité à la notion que JavaScript est Lispy, mais - avant de nous laisser emporter - pas homoiconique.)))))
la source
Cela pourrait aussi signifier quelque chose comme "Lexical Environment Type or Tied" .. Cela me dérange que ce soit simplement "que ce soit ça ". Et que rec n'aurait aucun sens dans le calcul lambda.
la source