let與const認識

 

es2015以前

在es2015以前JavaScript並無塊級做用域這個說法,只有全局和函數級的變量,let的出現使JavaScript語言有了塊級做用域函數

在外面訪問


{
var a=5; let b=10; } console.log(a,b);//a=5 b=undefined

在裏面訪問

{
  var a=5;
  let  b=10;  
 {
  console.log(a,b);//a=5 b=12
  }  
}

泄密

 

for(var i=0; i<5; i++){};
console.log(i)//i=5

for(var i=0; i<5; i++){};
console.log(i)//i=undefined

提高

使用var聲明的變量會提高,而使用let聲明的變量不會提高spa

function f(){
  console.log(a);   
  var a=5;
  
  /*等價於
  var a;
  console.log(a);
  a=5;*/
}
 f()//a=undefined


function f(){
  console.log(a);   
  let a=5;
}
 f()//a is not defined

代替當即執行匿名函數

var config = (function(){
       var config = [];
       config.push(1);
       config.push(2);
       config.push(3);
       return config;
})();


let config;
{
  config = [];
  config.push(1);
  config.push(2);
  config.push(3);  
}

 在嚴格模式(use strict)下運行函數不會被提高

function a(){console.log(1);}
function f(){
  a();
  if(false){
          function a(){console.log(2)}
  }
}

//這段代碼在非嚴格模式下運行會打印出2,在嚴格模式下運行會打印出1
  • 實例例子
var arr= [];

function f(){
   for(var i=0; i<5; i++){
      arr.push(function(){
          console.log(i);
      })
  }  
}

f();

arr[3]()//5
arr[4]()//5
arr[1]()//5

想要執行出想要的結果arr[x]()//x就必須用到letcode

var arr= [];

function f(){
   for(let i=0; i<5; i++){
      arr.push(function(){
          console.log(i);
      })
  }  
}

f();

arr[3]()//3
arr[4]()//4
arr[1]()//1

在es2015以前您必須這樣作blog

var arr= [];

function f(){
   for(var i=0; i<5; i++){
      arr.push((function(i){
          return function(){
                console.log(i);
          }
      })(i))
  }  
}

f();

arr[3]()//3
arr[4]()//4
arr[1]()//1
相關文章
相關標籤/搜索