对比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
相关文章
相关标签/搜索