var,let,const变量声明的区别

var,let,const变量声明的区别

  1. 作用域:
    • 当var在函数内部声明变量时,变量具有函数作用域,由于var变量声明提前因此可以在函数内部任意位置使用,但不可以在函数外部使用,且该变量不会成为window对象的一个属性;当var在函数外部声明时,该变量具有全局作用域,可以在代码的任意位置使用,且该变量会成为window对象的一个属性;当var声明的变量函数作用域和全局作用域冲突时(比如在函数内部和外部同时用var定义了同名的变量),在函数内部以函数作用域为先,此时要访问全局作用域的变量,可以通过window的属性来访问
    • letconst声明的变量具有块级作用域,这意味着它们只在声明它们的代码块内有效。
  2. 变量提升:
    • 使用var声明的变量会发生变量提升,即在声明之前使用该变量不会报错,但变量的值为undefined
    • var声明的函数作用域变量,其变量提升范围在作用域范围内,在函数外部外仍无法使用该变量
    • 使用letconst声明的变量不会发生变量提升,如果在声明前使用会抛出ReferenceError错误。
  3. 重复声明:
    • 使用var可以在同一作用域内重复声明同一个变量,后声明的同名变量会覆盖之前声明的值。
    • 使用var声明的变量可以再次使用var重复声明,但不能用let和const重复声明var已经声明过的变量
    • 使用let在同一作用域内不能重复声明同一个变量,否则会抛出语法错误。
    • 使用const声明的是一个常量,一旦赋值后不能修改,即使尝试修改也会抛出TypeError错误。
  4. 变量赋值:
    • 使用varlet声明的变量可以被重新赋值。
    • 使用const声明的变量是常量,一旦赋值后不能修改,即使尝试修改也会抛出TypeError错误。但是,对于对象和数组,虽然不能改变它们的引用,但可以修改对象内部的属性和数组的内容。
  5. 全局属性:
    • 使用var声明的全局作用域变量会成为浏览器的全局对象(如window对象)的属性,但函数作用域的变量不会成为window的属性。
    • 使用letconst声明的变量不会成为全局对象的属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值