记var let 区别


1.声明提升
for(var i=0;i<3;i++) {
  console.log(i)
  setTimeout(function() {
    console.log(i)  
  },1000)
}
等同于
var i;
for(i=0;i<3;i++) {
  console.log(i)
  setTimeout(function() {
    console.log(i)
    },1000)
}
结果打印1,2,3,3, 3, 3
使用var 定义的变量 会声明提升,可以先使用后声明

for(let i=0;i<3;i++) {
  console.log(i)
  setTimeout(function() {
    console.log(i)
  },1000)
}
分析
{ 
i=0 
console.log(0) 
setTimeout(function() { 
    console.log(0)}
,1000) 
}
{
i=1
console.log(1)
setTimeout(function() {
    console.log(1)  
})
}
{
i=2
console.log(2)
setTimeout(function() {
    console.log(2)  
})
}
结果打印 012 012
2.作用域
if(true){
  var i=1;
}
console.log(i)
结果打印1 if的花括号不能限制var定义的变量

function f(){
  var i=1
}
console.log(i)
结果报错,函数的花括号能限制var声明变量的范围
{
var a =1
}
console.log(a)
结果打印1 只有函数能限制var声明变量范围

function f(){
  let i=1
}
{
  let i=1
}
if() {
  let i=1
}
console.log(i)
结果报错 任何花括号都能限制let声明变量的范围

3.重复声明

var i=1
var i=2
可以,不推荐
let i=1
let i=2
报错,不允许重复定义

4.全局对象属性

var hi = 'nihao'
window.hi
使用var声明的全局变量 会成为全局对象window的属性
let hi = 'nihao'
window.hi
结果 undefind

总结 let是ES6新增的语法,var是老语法,代码中尽量全部用let, 弃用var。var有上面不好的特性

区别总结:
1 var 会声明提升,let不会
2 var 是函数作用域,let 是块级作用域
3 var 允许重复声明,let 不允许
4 var 声明的全局变量,会成为全局对象的属性, let不会


 

posted @ 2021-11-20 23:55  azz122342  阅读(50)  评论(0)    收藏  举报