多变量定义中的 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;
但是用let
和const
声明的变量不能被多次初始化;在给定范围内,必须只有一行用 let
或 const
.
初始化它们
相比之下,用var
声明的变量没有这样的限制。 var
s 基本上被提升到函数的顶部。所以
var foo = 5;
foo = 10;
就像
var foo;
foo = 5;
foo = 10;
和相同范围内的重复 var
声明不是问题,因为它们都将在顶部引用相同的提升标识符。这就是为什么您的第二个代码段不会引发错误的原因。
您的第三个代码段没有抛出错误,因为 admin
和 names
都只初始化了一次:
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;
语法错误:
let admin,
names = "Bob",
admin = names;
alert(admin);
var admin,
names = "Bob",
admin = names;
alert(admin);
let 变量的不同语法(无错误):
let admin, names;
names = "Bob";
admin = names;
alert(admin);
代码之间有什么区别?
当您在单个语句中使用逗号声明变量时,您是在为每个逗号(加上第一个逗号)声明一个变量。例如:
let admin,
names = "Bob",
admin = names;
相当于,分成3条语句:
let admin;
let names = "Bob";
let admin = names;
但是用let
和const
声明的变量不能被多次初始化;在给定范围内,必须只有一行用 let
或 const
.
相比之下,用var
声明的变量没有这样的限制。 var
s 基本上被提升到函数的顶部。所以
var foo = 5;
foo = 10;
就像
var foo;
foo = 5;
foo = 10;
和相同范围内的重复 var
声明不是问题,因为它们都将在顶部引用相同的提升标识符。这就是为什么您的第二个代码段不会引发错误的原因。
您的第三个代码段没有抛出错误,因为 admin
和 names
都只初始化了一次:
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;