JavaScript let (EcmaScript 6 let), JavaScript 局部变量。
let声明一个块级域的局部变量,并且可以同时初始化该变量。
语法
1
|
let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]];
|
let 允许把变量的作用域限制在块级域中。与 var 不同处是:var 申明变量要么是全局的,要么是函数级的,而无法是块级的。
例子:
用 let 在一个代码块中定义变量.
1
2
3
4
|
if
(x > y) {
let gamma = 12.7 + y;
i = gamma * x;
}
|
在用到内部函数的时候,let 能够让代码更简洁,比如:
1
2
3
4
5
6
7
8
9
10
|
var
list = document.getElementById(
"list"
);
for
(
var
i = 1; i <= 5; i++) {
var
item = document.createElement(
"LI"
);
item.appendChild(document.createTextNode(
"Item "
+ i));
let j = i;
item.onclick =
function
(ev) {
console.log(
"Item "
+ j +
" is clicked."
);
};
list.appendChild(item);
}
|
上面这段代码的意图是创建5个li,点击不同的li能够打印出当前li的序号。如果不用let,而改用var的话,将总是打印出 Item 5 is Clicked,因为 j 是函数级变量,5个内部函数都指向了同一个 j ,而 j 最后一次赋值是5。用了let后,j 变成块级域(也就是花括号中的块,每进入一次花括号就生成了一个块级域),所以 5 个内部函数指向了不同的 j 。
作用域规则
用 let 定义的变量的作用域是定义它们的块内,以及包含在这个块中的子块 ,这一点有点象var,只是var 定义的变量的作用域是定义它们的函数内 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
function
varTest() {
var
x = 31;
if
(
true
) {
var
x = 71;
// same variable!
console.log(x);
// 71
}
console.log(x);
// 71
}
function
letTest() {
let x = 31;
if
(
true
) {
let x = 71;
// different variable
console.log(x);
// 71
}
console.log(x);
// 31
}
|
在程序或者函数的顶层,let 的表现就象 var 一样:
1
2
3
4
|
var
x =
'global'
;
let y =
'global'
;
console.log(
this
.x);
console.log(
this
.y);
|
上面这段代码的运行后会显示两次"global"。