ES6-01:常量与变量的声明

首先,我们声明一个变量:

//定义一个变量num,并赋值为10;
let num = 10;
//进行打印
console.log(num);

let与var有所不同:

语法特点1:let变量只能在当前代码块使用

(function(){
        {
            let i = 2;
        }
        alert(i);
    })();

代码块是什么呢?

我们的大括号就属于一个代码块,只要是代码块以内的都可以使用到,如果在外面就获取不到了,此时输出的i是没有值的。

语法特点2:同一代码块不允许出现重名let变量

(function(){
        var i = 9;//不允许
        let i = 10;//不允许
        let i = 11;
        console.log(i);
    })();

下面来看下一个小测试:

 var arr3 = [];
    for(var i = 0;i<10;i++){
      arr3[i] = function(){
          alert(i)
      }
    }
    arr3[3]();

结果会是多少?

变量i是var声明的,在全局内都有效,

所以每次循环,新值都会覆盖旧值,导致最后输出的是最后一轮的i的值。

我们如何解决这种问题呢?

这就要说到闭包了,这里不多说,看下解决方法(如果不了解闭包可以在本博客搜索相关知识)。

以下通过闭包解决

var arr = [];for(var i = 0;i<10;i++){
        (function sum(val){
            arr[i] = function(){
                alert(val);
            }
        })(i)

    }
    arr[9]();

当然,这种方法是不是麻烦了点!我们可以通过let定义变量来解决这个问题

以下是let解决

var arr2 = [];
    for(let i = 0;i<10;i++){
        arr2[i] = function(){
            alert(i)
        }
    }
    arr2[3]();
变量i是let声明的,当前的i只在本轮循环有效,
所以每一次循环的i其实都是一个新的变量,所以最后输出的是3.
你学会了吗?有问题欢迎提出来!
posted @ 2017-03-02 19:54  叶小凡  阅读(577)  评论(0)    收藏  举报