對比let、const、var的異同

let、const和var的區別

var : 做用域是函數體的所有,聲明變量提高函數

console.log(num);//undefined
  var num = 2 
  //循環內變量過分共享
  for (var i = 0; i < 4; i++) {
    alert(i);//0,1,2,3
  }
  for (var i = 0; i < 4; i++) {
     setTimeout(function () {
       alert(i)//4,4,4,4
     }, i * 100);
  }

循環自己及三次timeout回調均共享惟一的變量i。當循環結束執行時,i的值爲4,此時回調還沒有被觸發.
因此當第一個timeout執行時,調用alert(i),此時i的值爲4,因此最終彈出來的是4.code

let聲明的變量擁有塊級做用域,聲明的全局變量不是全局對象的屬性,聲明的變量直到控制流到達該變量被定義的代碼行時纔會被裝載,用let重定義變量會拋出一個語法錯誤對象

var j = 100;
  for (let i = 0; i < 4; i++) {
     console.log(j)//not defined,暫時性死去,即便在該做用域外已經存在這個變量,若是做用域內須要使用 let、 const 再次聲明,則必須提早,不然沒法使用,直到聲明後纔可使用
     setTimeout(function () {
       alert(i)//0、一、二、3,塊級做用域
     }, i * 100);
     let j = 0;
     //let j = 2;//SyntaxError,重定義變量會拋出一個語法錯誤
     console.log(j)//0,0,0,0
  }
  window.i//undefined,不是全局對象的屬性

const聲明的變量與let聲明的變量相似,它們的不一樣之處在於,const聲明的變量只能夠在聲明時賦值,不可隨意修改,不然會致使SyntaxError(語法錯誤).作用域

const num = 1;
    num = 2;// Assignment to constant variable
相關文章
相關標籤/搜索