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

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"。


猜你喜欢

转载自blog.csdn.net/tt361/article/details/50205655
今日推荐