let和var、const的区别

变量的声明提升

var

在js中使用var声明的变量,它的声明部分会被提升到当前函数的第一行或者如果没有函数的话会被提升到整个代码的最顶部

console.log(a)
var a=1
console.log(a)


运行结果:
undefined
1

以上这段代码就等于

var a
console.log(a)
a=1
console.log(a)

let

let是没有变量提升的,const也没有变量提升。另外const在声明时必须赋值,let和var不需要

console.log(a)
let a=1
console.log(a)

运行结果:
a is not defined(报错)

作用域

var

用var声明的变量作用域是函数作用域也就是说用var声明的变量只能被函数限制住范围,其他任何的花括号都不能限制用var声明的变量的作用域

if(true){
var a=1
}
console.log(a)

运行结果:1
function f(){
var a=1
}
console.log(a)

运行结果:报错a is not defined

let

用let声明的变量作用域是块级作用域,任何花括号都可以限制住变量的作用范围,const也是块级作用域

if(true){
    let a=1
}
console.log(a)

运行结果:报错a is not defined

举例:

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)
}

打印结果是:
012333

for(let i=0;i<3;i++){
    console.log(i)
    setTimeout(function(){
       console.log(i)
  },1000)
}

等价于
{
    let i=0
    console.log(i)
    setTimeout(function(){
       console.log(i)
  },1000)
}
{
    let i=1
    console.log(i)
    setTimeout(function(){
       console.log(i)
  },1000)
}
{
    let i=2
    console.log(i)
    setTimeout(function(){
       console.log(i)
  },1000)
}
打印结果是:
012012

重复声明

用var定义的变量可以重复声明,用let是不能的,const也是不能重复定义的,const比let更严格,let虽然不能重复声明但是可以修改值,而const是不能修改值的。const声明的是常量

如何解决const只能定义一次且不能修改的问题:我们可以定义一个const数组

const content=[ ]
content[0]=text.value

这里的content变量只是有个指针指向这个数组 ,数组自己是可以修改的,这里涉及到数据类型和指针的问题

全局对象属性

var hi='你好'
window.hi
结果是你好
let hi='你好'
window.hi
结果是undefined

没用放在任何函数中的变量叫全局变量,var声明的是全局变量他会成为window的全局对象的一个属性,但是用let声明出来的全局变量不会成为全局对象的属性

let和const是ES6新增的语法,var是老语法,目前代码中尽量都是用let弃用var,因为var有一些不好的特性

猜你喜欢

转载自blog.csdn.net/weixin_52479225/article/details/128284030