ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

var、let、const的区别

2022-08-18 11:30:08  阅读:69  来源: 互联网

标签: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
来源: https://www.cnblogs.com/Luffy-RedRoc/p/16598080.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有