var 与 let区别

变量提升–带有变量提升的变量会在js创建阶段 先赋值为undefined 在运行阶段 赋值为对应值

let声明的变量 没有变量提升特性 是在声明阶段进行赋值 var声明变量有变量提升

function a(){
  console.log(b);//undefine
  console.log(c);//会报错,错误信息:Uncaught ReferenceError: c is not defined
  var b = 1;
  let c = 2
}
a()

let声明变量作用域在对应代码块{}内 只能在对应代码块内调用 且不能被再次赋值

function a(){
  let b = 1;
  let b = 2;//会报错 错误信息:Uncaught SyntaxError: Identifier 'b' has already
}
a()

var声明在全局 则任何处都可以调用 声明在函数内 则在函数任意处都可以调用 声明在块内 也可以在父级域内调用(全局或某层函数)

function a(){
  for(var i=0;i<3;i++){
    console.log(i);//0,1,2
  }
  for(let j=0;j<3;j++){
    console.log(j);//0,1,2
  }
}
a()

function b(){
  for(var i=0;i<3;i++){
    setTimeout(function(){
      console.log(i);//3,3,3
    },0)
  }
  for(let j=0;j<3;j++){
    console.log(j);//0,1,2
    setTimeout(function(){
    },0)
  }
}
b()

发表评论

电子邮件地址不会被公开。 必填项已用*标注