小姜哥的微信

JavaScript let (EcmaScript 6 let), JavaScript 局部变量

JavaScript let (EcmaScript 6 let), JavaScript 局部变量。

let声明一个块级域的局部变量,并且可以同时初始化该变量。

语法

let var1 [= value1] [, var2 [= value2]] [, …, varN [= valueN]];let 允许把变量的作用域限制在块级域中。与 var 不同处是:var 申明变量要么是全局的,要么是函数级的,而无法是块级的。

例子:

用 let 在一个代码块中定义变量.

if (x > y) {
let gamma = 12.7 + y;
i = gamma * x;
}在用到内部函数的时候,let 能够让代码更简洁,比如:

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 定义的变量的作用域是定义它们的函数内 :

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 一样:

var x = 'global';
let y = 'global';
console.log(this.x);
console.log(this.y);上面这段代码的运行后会显示两次"global"。

推荐文章

回到顶部