在Javascript中为“ let”分配一个值

时间:2019-11-20 20:28:18

标签: javascript

我正在使用Chrome devtools,并尝试了以下代码:

let = 1;
let x = 2;

console.log(let); // 1
console.log(x); // 2

如果我将“ let”替换为“ var”,则以上代码将不起作用。

我假设let = 1var let = 1相同。如果是这样,let x = 2是否应该翻译成1 x = 2并因此出错?

2 个答案:

答案 0 :(得分:10)

  

我假设CL-USER 2 > (defun split-string (string) (loop for i from 0 below (length string) by 2 collect (subseq string i (+ i 2)))) SPLIT-STRING CL-USER 3 > (split-string "AABBCCDDEEFF") ("AA" "BB" "CC" "DD" "EE" "FF") CL-USER 4 > (mapcar (lambda (s) (parse-integer s :radix 16)) *) (170 187 204 221 238 255) let = 1相同

它声明了一个变量,但不相同。这里的主要区别在于,通过省略诸如var let = 1varlet之类的声明,您可以全局* 声明此变量(假设您是不设置先前声明的变量)。这就是所谓的隐式全局-臭名昭著的code smell

**在大多数情况下,“全局”将引用const对象,但并非总是如此。例如,Node.js有自己的window命名空间对象,该对象引用当前模块。


  

如果是这样,global是否应该翻译成let x = 2并因此出错?

不。 1 x = 2不会覆盖let = 1声明/关键字的本机功能。您仅创建了一个具有相同名称的全局变量。 (也许不用多说,但不要这样做!


您没有具体询问,但是值得解决:

  

为什么我可以做let但不能做let = 1

var = 1reserved keyword

var future 保留关键字,这意味着当前仅在严格模式中保留。请记住,如果您要编写经受时间考验的代码,最好不要使用let作为标识符。正如MDN在链接文章中所指出的那样,我想它会早于这个保留字。

答案 1 :(得分:5)

向后兼容。 let相对较新,因此,使用它作为变量名不破坏旧脚本不是保留关键字。这就是为什么您可以使用let作为变量名而不使用var的原因。

  

我假设let = 1与var let = 1相同。

不。而是等于someothername = 1并创建一个非常糟糕的隐式全局变量