多变量定义中的 let 和 var 有什么区别?

What is the difference between let and var in a multiple variable definition?

语法错误:

let admin,
names = "Bob",
admin = names;

alert(admin);
不建议使用 var 变量,但这样的定义会导致错误吗? "var" 没有错误:
var admin,
names = "Bob",
admin = names;

alert(admin);

let 变量的不同语法(无错误):

let admin, names;

names = "Bob";

admin = names;

alert(admin);
我已经探索了 var 和 let 变量之间的区别,但我并没有完全理解这里的区别。

代码之间有什么区别?

当您在单个语句中使用逗号声明变量时,您是在为每个逗号(加上第一个逗号)声明一个变量。例如:

let admin,
names = "Bob",
admin = names;

相当于,分成3条语句:

let admin;
let names = "Bob";
let admin = names;

但是用letconst声明的变量不能被多次初始化;在给定范围内,必须只有一行用 letconst.

初始化它们

相比之下,用var声明的变量没有这样的限制。 vars 基本上被提升到函数的顶部。所以

var foo = 5;
foo = 10;

就像

var foo;
foo = 5;
foo = 10;

和相同范围内的重复 var 声明不是问题,因为它们都将在顶部引用相同的提升标识符。这就是为什么您的第二个代码段不会引发错误的原因。

您的第三个代码段没有抛出错误,因为 adminnames 都只初始化了一次:

let admin, names;

就像

let admin;
let names;

很好。 多次将赋值给一个变量不是问题(只要变量没有用const声明);只是 初始化 一个 let 变量必须只发生一次。

区别在于你可以多次声明一个变量 var, but not with let:

var v = 42;
var v;
console.log(v);

let l = 42;
let l;
// SyntaxError: Cannot declare a let variable twice: 'l'.

实际上,在您的示例中,我们更早地被 14.3.1.1 Declarations and the Variable Statement – Let and Const Declarations – Static Semantics: Early Errors 条款 2 咬伤:

It is a Syntax Error if the BoundNames of BindingList contains any duplicate entries.

let l, l;
// SyntaxError: Cannot declare a let variable twice: 'l'.

很简单! var 和 let 都用于 typescript 中的变量声明,但它们之间的区别在于 var 是函数作用域,而 let 是块作用域。 让我们看下面的例子。

// calling x after defining 
var x = 5; 
document.write(x, "\n"); 
  
// calling y after defining  
let y = 10; 
document.write(y, "\n"); 
  
// calling var z before defining will return undefined 
document.write(z, "\n"); 
var z = 2; 
  
// calling let a before defining will give error 
document.write(a); 
let a = 3;