首页 > 其他分享 >var、let、const的区别

var、let、const的区别

时间:2022-08-18 11:37:11浏览次数:55  
标签:const log let var console name

1、var定义的全局变量可被后面定义的相同名称的变量覆盖,可以重复声明,而let、const不会,不能重复声明

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

let b = 1
let b = 2
console.log(b)  // 报错 Uncaught SyntaxError: Identifier 'b' has already been declared   b 已经被声明

const c = 1
const c = 2
console.log(c) // 报错 Uncaught SyntaxError: Identifier 'c' has already been declared   c 已经被声明

2、var 有变量提升,let、const 必须先声明再使用

console.log(a)
var a = 1 // undefined
    // 等同于
var a
console.log(a)
var a = 1

console.log(b)
let b = 1  // 报错  Uncaught ReferenceError: Cannot access 'b' before initialization

console.log(c)
const c = 1 // 报错  Uncaught ReferenceError: Cannot access 'c' before initialization

3、var 在函数作用域中有效,let、const只在所处的作用域中有效

for(var y = 0;y<10;y++){}
console.log(y)// 10
for(let i = 0;i<10;i++){}
console.log(i)//i is not defined
        

4、let 声明的变量可以更改变量值,const声明的变量值不能更改

5、题外:在函数内外使用的var

var name = 'world';
    function changeName(){
      console.log('函数的  '+name) //如果函数内部没有变量name 那么打印的name是 world,因为会从外部找。如果内部声明了name,那么打印的是undefined,因为内部声明了变量,变量提升
      var name = 'lili'
      console.log(name)//lili
      // 总结:函数内部声明的变量名与外部全局变量名相同时,内部声明的变量只能在函数内部生效,与外部全局变量无关,互不影响。
    }
    changeName()
    console.log(name);//world 没改变 
    (function(){
      console.log('匿名函数的 '+name) // undefined 是因为函数内部声明了name 如果没有var name = 'Jun' 将打印 world
      if(typeof name === 'undefined'){
        var name = 'Jun'
        console.log('hello ' + name)
      }else{
        console.log('去死吧' + name)
      }
    })()// 打印出来是  lello Jun
    console.log(name) // word 因为外部的变量不会因为函数内部重新声明的变量而改变
    //js 中代码的运行会先检查、装载,即声明变量、函数等操作,然后再进入执行阶段,变量赋值属于执行阶段,
    //匿名函数自执行会在声明后直接执行

 

标签:const,log,let,var,console,name
From: https://www.cnblogs.com/Luffy-RedRoc/p/16598080.html

相关文章

  • std::condition_variable 条件变量
    std::condition_variable条件变量 voidwait(std::unique_lock<std::mutex>&lock);#1template<classPredicate>voidwait(std::unique_lock<std::mutex>&lo......
  • construct
    construe[fromLatin,'toconstruct',fromcom-+struere'tobuild']understandaremarkoractioninaparticularway树立(establish;setup;build)理念/观......
  • JSP和servlet之间的相互传值
    1.从一个jsp页面跳转到另一个jsp页面时的参数传递(1)使用request对象获取客户端提交的信息login.jsp页面代码如下:点击查看代码<%@pagelanguage="java"import="java......
  • Eureka客户端注册报错Completed shut down of DiscoveryClient
    在SpringBoot子项目使用EurekaClient向EurekaServer中注册服务时,client启动报错CompletedshutdownofDiscoveryClient解决办法是在Client的Pom文件中加入<......
  • constant
    assist[fromLatinassistere,fromad-'to'+sistere'tocausetostand']assistantconsist[fromconsistere'tostandstillorfirm,exist',fromcom-+sis......
  • Bzoj 2724 [Violet 6]蒲公英
    原题链接https://darkbzoj.cc/problem/2724大致题意:给一个长度为n的序列,进行m次询问,每次询问输出区间内出现次数最多的数,强制在线。离散化加分块对于离散化后的每个数......
  • External Constraint Blocks
    您可以将类中的约束指定为“外部”约束。一旦将一个约束声明为“extern”,必须在一个外部约束块中提供它的定义,否则将会报错。请注意,“外部”约束和内部(隐式)约束都可以由......
  • 2.C/C++的const
    1.C语言的const修饰的变量都有空间2.C语言的const修饰的全局变量具有外部链接属性3.C++语言的const修饰的变量有时有空间,有时没有空间(发生常量折叠,且没有对变量进行取址......
  • 奇淫巧技,CompletableFuture 异步多线程是真的优雅
     一个示例回顾Future一些业务场景我们需要使用多线程异步执行任务,加快任务执行速度。JDK5新增了Future接口,用于描述一个异步计算的结果。虽然Future以及相关使用......
  • SpringBoot连接redis报错:exception is io.lettuce.core.RedisException: java.io.IOE
    一、解决思路(1).检查redis的配置是否正确springredis:host:localhostport:6379password:123456database:0......