let和var、const的区别

川长思鸟来 2024-03-31 17:50 146阅读 0赞

变量的声明提升

var

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

  1. console.log(a)
  2. var a=1
  3. console.log(a)
  4. 运行结果:
  5. undefined
  6. 1

以上这段代码就等于

  1. var a
  2. console.log(a)
  3. a=1
  4. console.log(a)

let

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

  1. console.log(a)
  2. let a=1
  3. console.log(a)
  4. 运行结果:
  5. a is not defined(报错)

作用域

var

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

  1. if(true){
  2. var a=1
  3. }
  4. console.log(a)
  5. 运行结果:1
  6. function f(){
  7. var a=1
  8. }
  9. console.log(a)
  10. 运行结果:报错a is not defined

let

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

  1. if(true){
  2. let a=1
  3. }
  4. console.log(a)
  5. 运行结果:报错a is not defined

举例:

  1. for(var i=0;i<3;i++){
  2. console.log(i)
  3. setTimeout(function(){
  4. console.log(i)
  5. },1000)
  6. }
  7. 等价于
  8. var i
  9. for(i=0;i<3;i++){
  10. console.log(i)
  11. setTimeout(function(){
  12. console.log(i)
  13. },1000)
  14. }
  15. 打印结果是:
  16. 012333
  17. for(let i=0;i<3;i++){
  18. console.log(i)
  19. setTimeout(function(){
  20. console.log(i)
  21. },1000)
  22. }
  23. 等价于
  24. {
  25. let i=0
  26. console.log(i)
  27. setTimeout(function(){
  28. console.log(i)
  29. },1000)
  30. }
  31. {
  32. let i=1
  33. console.log(i)
  34. setTimeout(function(){
  35. console.log(i)
  36. },1000)
  37. }
  38. {
  39. let i=2
  40. console.log(i)
  41. setTimeout(function(){
  42. console.log(i)
  43. },1000)
  44. }
  45. 打印结果是:
  46. 012012

重复声明

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

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

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

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

全局对象属性

  1. var hi='你好'
  2. window.hi
  3. 结果是你好
  4. let hi='你好'
  5. window.hi
  6. 结果是undefined

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

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

发表评论

表情:
评论列表 (有 0 条评论,146人围观)

还没有评论,来说两句吧...

相关阅读

    相关 var、letconst区别

    const定义的变量不可以修改,而且必须初始化。 var定义的变量可以修改,如果不初始化会输出undefined,不会报错。 let是块级作用域,函数内部使用

    相关 js中letvar区别

    js中使用let定义变量的时候,是需要使用严格模式的,我看到网上有的博客说:如果在不使用严格模式的情况下,使用let会报错,但是在实验的过程中,我直接定义了let变量而且也没有