循环中的let和const声明

一、循环中的let声明

       每次循环的时候let声明都会创建一个新变量i,并将其初始化为i的当前值,所以循环内部创建的每个函数都能得到属于他们的i的副本。

     最初的:

     for (var i = 0 ; i < 10 ; i++) {
   array.push(function(){
       console.log(i)
   }) 
  };
    array.forEach(function(func){
         func()
    })

    优化后:

   var array=[];
   for (var i = 0 ; i < 10 ; i++) {
       array.push(function(value){
            return function(){
                 console.log(value)
            }
       }(i))
    };
    array.forEach(function(func){
        func()
    })

 

但是用了let更方便

 var array=[];

for (let i = 0 ; i < 10 ; i++) {
   array.push(function(){
       console.log(i)
   }) 
  };
    array.forEach(function(func){
         func()
    })

 

二、循环中的const声明

   const属于常量定义,一经定义不能修改,在上述例子中,不可以用const,否则完成第一次迭代,就会抛出错误,但是可以用for  in,for  of语句的,与let用法一样

   之所以能用,主要还是因为每次迭代不会修改已有的绑定,而是会创建一个新绑定。

posted @ 2017-08-25 16:11  星空0909  阅读(576)  评论(0编辑  收藏  举报