Larkin - let vs var

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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!不解释,你懂得!

以上是关于Larkin - let vs var的主要内容,如果未能解决你的问题,请参考以下文章

let vs var

用下面的代码解释一下javascript中var和let关键字的区别

javascript中的let vs var [重复]

Swift - 以编程方式创建视图时的 Lazy Var vs. Let(节省内存)

Clojure let vs Common Lisp let

let 和 var的区别