var、let、const的区别(超详细易懂)_var let const的区别-程序员宅基地

技术标签: JavaScript  es6  javascript  ecmascript  

个人网站: 【紫陌】【笔记分享网】
想寻找共同学习交流、共同成长的伙伴, 请点击【前端学习交流群】

1.作用域区别

letconst具有块级作用域,var不存在块级作用域,可以跨块访问, 不能跨函数访问

      if(true){
            var a = 0
            let b = 0
            const c = 0
        }
        console.log(a);
        console.log(b);
        console.log(c);

 这里只有var声明的变量才能打印出来,因为var声明的事全局变量,

var出来的变量是全局的,但是不能跨函数访问。看下面代码

    function test() {
              var message = "zimo";   // 局部变量
             }
        test();
        console.log(message);  // 报错

 2.变量提升

什么是变量提升?

变量能在声明之前使用,就是变量提升。

var存在变量提升,let和const不存在变量提升

        console.log(a);
        console.log(b);
        console.log(c);

        var a = 1
        let b = 2
        const c = 3

var在js中是支持预解析的声明出来的就不会报错是undefined,let,const就会报错

3.全局属性

浏览器的全局对象是window。var声明的变量为全局变量,并且会将该变量添加为全局对象的属性,但是let和const不会。

        var a = 1
        let b = 2
        const c = 3

        console.log(window.a);
        console.log(window.b);
        console.log(window.c);

4.重复声明

var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的遍历。const和let不允许重复声明变量。

        var a = 1
        var a = 2

        console.log(a);

var声明的变量同名只会打印最后一次声明的值

 let 和 const同一个作用域下不能重名,编辑器都提示了

5.暂时性死区

在使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区。使用var声明的变量不存在暂时性死区。

        // name会被提升
        console.log(name); // undefined
        var name = 'zimo';

        // age不会被提升
        console.log(age); // ReferenceError:age没有定义
        let age = 18;

        // sex不会被提升
        console.log(age); // ReferenceError:age没有定义
        const sex = "男";

 6.初始值设置

在变量声明时,var 和 let 可以不用设置初始值。而const声明变量必须设置初始值。

 编辑器都提示了

7.指针指向

指针指向:let和const都是ES6新增的用于创建变量的语法。 let创建的变量是可以更改指针指向(可以重新赋值)。但const声明的变量是不允许改变指针的指向。

8.应用场景

块级作用域解决了ES5中的两个问题:

  • 内层变量可能覆盖外层变量
  • 用来计数的循环变量泄露为全局变量

应用场景:以后声明变量使用 let 就对了

应用场景:声明对象类型使用 const,非对象类型声明选择 let

没有特殊情况就不要用var了

9.总结

区别

var

let

const

是否有块级作用域

×

是否存在变量提升

×

×

是否添加全局属性

×

×

能否重复声明变量

×

×

是否存在暂时性死区

×

是否必须设置初始值

×

×

能否改变指针指向

×

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_57677300/article/details/126617174

智能推荐

Android系统新产品定制_export build_target 還原-程序员宅基地

文章浏览阅读1.1k次。配置过程分析:1: . ./build/envsetup.shincluding device/samsung/smdkv210/vendorsetup.sh------------------------------------------------------------------build/envsetup.sh末尾有:# Execute the contents o_export build_target 還原

SQLCookBook第四章学习日记11_insert into default-程序员宅基地

文章浏览阅读450次。第四章 插入、更新与删除 4.1插入新纪录4.2插入默认值_insert into default

ESD保护二极管ESD9B3.3ST5G 以更小的空间实现强大的保护 车规级TVS二极管更给力-程序员宅基地

文章浏览阅读594次。ESD9B3.3ST5G是一款 双向ESD保护 TVS二极管,设计用于保护电压敏感型来自ESD的组件。良好的夹紧能力,低泄漏,而且,快速响应时间可为设计提供一流的保护:暴露在静电放电下。反应速度快,电容值低,体积小,集成度高,封装多样化,漏电流低,电压值低有助于保护敏感的电子电路。ESD9B3.3ST5G ESD静电保护二极管应用于手机和配件、便携式电子产品、工业控制设备、机顶盒、电子仪器仪表、服务器,笔记本电脑和台式机、显示端口等。

宁波中软国际实习日记(一):SSM框架开发环境搭建-程序员宅基地

文章浏览阅读807次,点赞2次,收藏2次。宁波中软国际实习日记第一天:搭建开发环境1.0 JDK安装2.0 IDEA安装3.0 Tomcat安装、部署4.0 Maven安装、部署5.0 MySQL安装6.0 Notepad++安装1.0 JDK安装实习所用JDK版本是JDK8,在官网的下载页面找到Java SE 8u151/ 8u152的JDK download 按钮。点进去。双击安装程序后,一直点next就行。接下来是环境变..._中软国际实习日记

django数据存入mysql数据库_Django学习系列15:把POST请求中的数据存入数据库-程序员宅基地

文章浏览阅读231次。要修改针对首页中的POST请求的测试。希望视图把新添加的待办事项存入数据库,而不是直接传给响应。为了测试这个操作,要在现有的测试方法test_can_save_a_post_request中添加3行新代码# lists/tests.pydeftest_can_save_a_post_request(self):response= self.client.post(‘/‘, data={‘item_..._django http post mysql

使用s32k144 UDS Bootloader软件与周立功ZCANPRO脚本,轻松学习调试,简单操作上位机_zcanpro脚本无法运行-程序员宅基地

文章浏览阅读295次,点赞4次,收藏4次。其中一项重要的技术是s32k144 uds bootloader软件,它结合了上位机周立功ZCANPRO脚本,操作简单且非常适合学习调试。对于汽车电子开发人员来说,s32k144 uds bootloader软件为他们提供了一个快速而可靠的开发平台,使他们能够更好地进行软件的开发和调试工作。总结来说,s32k144 uds bootloader软件结合了上位机周立功ZCANPRO脚本,为汽车制造商和汽车电子开发人员带来了许多便利和优势。它提供了一个高效和安全的方式,实现对ECU固件的更新和调试。_zcanpro脚本无法运行

随便推点

后端面试每日一题 垃圾回收算法,面试资料分享-程序员宅基地

文章浏览阅读854次,点赞10次,收藏17次。校验的内容就是此对象是否重写了 finalize() 方法,如果该对象重写了 finalize() 方法,那么这个对象将会被存入到 F-Queue 队列中,等待 JVM 的 Finalizer 线程去执行重写的 finalize() 方法,在这个方法中如果此对象将自己赋值给某个类变量时,则表示此对象已经被引用了。它是指将内存分为大小相同的两块区域,每次只使用其中的一块区域,这样在进行垃圾回收时就可以直接将存活的东西复制到新的内存上,然后再把另一块内存全部清理掉。// 等待 finalize() 执行。

LeetCode 1427. 字符串的左右移_leetcode 1427 python-程序员宅基地

文章浏览阅读246次。LeetCode 1427. 字符串的左右移文章目录LeetCode 1427. 字符串的左右移题目描述一、解题关键词二、解题报告1.思路分析2.时间复杂度3.代码示例2.知识点总结相同题目题目描述给定一个包含小写英文字母的字符串 s 以及一个矩阵 shift,其中 shift[i] = [direction, amount]: direction 可以为 0 (表示左移)或 1 (表示右移)。 amount 表示 s 左右移的位数。 左移 1 位表示移除 s 的第一个字符,并_leetcode 1427 python

好用的不行不行!超级炫酷的键盘最应该留给最般配的猿们!-程序员宅基地

文章浏览阅读2k次。在北半球,3月是春季的第一个月,春天象征着希望和美好。关注我的读者大多数都是(程序)猿,所以好用的键盘必不可少!今天为了感谢大家对本公众号的大力支持我联合了10个号主送11个炫酷键盘,不..._cole mak键盘

c语言——用函数或循环打印100到200之间的素数_for循环求100~200的素数编程-程序员宅基地

文章浏览阅读989次,点赞2次,收藏2次。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ m的开方之间的每一个整数去除就可以了。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。例如 16 能被 2、4、8 整除,16=28,2 小于 4,8 大于 4,16=44,4=√16,因此只需判定在 2~4 之间有无因子即可。判断i是否为素数,可以用2——i-1之间的数字试除i,如果可以被整除,则不是素数;2、用if语句判断i会不会被2——i-1之间的数字整除。_for循环求100~200的素数编程

免费文本转语音本地安装TTS_本地tts-程序员宅基地

文章浏览阅读981次。tts 文本转语音免费工具_本地tts

大事件,Java被超越了,2024年5月TIOBE编程语言排行榜出炉_tiobe 排行榜-程序员宅基地

文章浏览阅读848次,点赞23次,收藏7次。TIOBE 5月编程语言排行榜新鲜出炉。前十榜单中,C、Python、Java三大鳌头仍占据前三榜单。去年11月,Python短时间的挤掉Java跃居至榜单第二名;今年5月,Python再次挤掉Java,再度夺下榜二。TIOBE排行榜是世界上权威编程语言排行榜,注意,它只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,毕竟术业有专攻。TIOBE开发语言排行榜每月更新一次,其结果作为当前业内程序开发语言的流行使用程度的有效指标。该指数可以用来检阅开发者的编程技能能否跟上趋势,或是否有必要作出战略改_tiobe 排行榜

推荐文章

热门文章

相关标签