Larkin - let vs var

我们先上一段 var 代码

 1 function ceshi(bo): number {
 2     let num = 1;
 3     if(bo){
 4         var b = 12;
 5         b += num;
 6     }
 7     return b;
 8     
 9 }
10 let val = ceshi(true);
11 console_log(val); // 13

 

function ceshi(bo): number {
    let num = 1;
    if(bo){
        let b = 12;
        b += num;
    }
    return b; // error 
    
}

 

因此我们发现 var 申明变量会提前,而 let 声明属于块级作用域。

下面我们来看一个 for 经典:

function ceshi(){
    for(var i=0; i<10; i++){
        setTimeout(function (){
            console.log(i);
        },i*1000);
    }
}
ceshi(); // 10 10 10 10 10 10 10 10 10 10

可见这并不是我们想要的结果,若我们将 var 改为 let:

function ceshi(){
    for(let i=0; i<10; i++){
        setTimeout(function (){
            console.log(i);
        },i*1000);
    }
}
ceshi(); // 0 1 2 3 4 5 6 7 8 9

可见我们需要谨慎使用 var ,最后一个例:

 1  
 2  let classArr: number[][] = [
 3     [65,79,58,60],
 4     [98,69,78,86],
 5     [19,43,34,81],
 6     [56,59,66,45],
 7  ];
 8  function ceshi(arr: number[][]){
 9     let sum: number = 0;
10     let student, len = arr.length;
11     for(let i=0; i<len; i++){
12         student = arr[i];
13         for(let i=0; i<student.length; i++){
14             sum += student[i];
15         }
16     }
17     console.log(sum);
18  }
19  ceshi(classArr); // 996
20  

若我们将 let i 改为 var i ,这将会有严重的作用域错误理解,最后。。。

ok, so perfect!不解释,你懂得!

posted @ 2017-12-01 14:12  黄开金  阅读(220)  评论(0)    收藏  举报