let 、const和var的区别

let、const、var在js中都是用于声明变量的,在没有进行ES6的学习前,我基本只会使用到var关键字进行变量的声明,但在了解了ES6之后就涉及到了块级作用域以及let,const了。

let与const

  • let是用于替代var来声明变量(var是ES6之前用来声明变量的关键词)
  • const是用来声明常量的(var,let声明变量时,变量一旦初始化之后,还可以重新赋值,const声明常量,一旦初始化,就不能重新赋值了,否则会报错)

const详细介绍

使用const的原因:const 就是为了那些一旦初始化就不希望重新赋值的情况设计的

  • 注意事项:使用const声明常量,一旦声明,就必须立即初始化
  • 特殊说明:const声明常量,允许在不重新赋值的情况下修改它的值(基本数据类型不可,只有引用数据类型可以,引用类型引用的是地址不是值)
//基本数据类型赋值为常量之后是不可修改的
const name='zhangsan';
name='nn'; //x
//引用数据类型
const student={age:18};
//student={};
student.age=19;

const的傻瓜使用指南
毕竟基础数据类型去修改const会报错,那其实可以都用const进行变量的声明,当变量后面发生变化时自然会报错(前提是你还记得住,还是不太推荐这个傻瓜指南的)。

块级作用域

咱就是说块级作用域简单说明一下,const和let的使用区别是会涉及到这个的

啥是作用域

常见的作用域主要分为几个类型:全局作用域、函数作用域、块状作用域、动态作用域。

对象 类型
global/window 全局作用域
function 函数作用域(局部作用域)
{} 块级作用域
this 动态作用域
啥是块级作用域

JS中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称ES6)中新增了块级作用域,使用let声明的变量只能在块级作用域里访问,有“暂时性死区”的特性(也就是说声明前不可用)。

  • 块级作用域:
  1. 块级作用域:大部分包含{}的都可以构成块级作用域,但是函数和对象不构成块级作用域(函数属于的是函数作用域而不是块级作用域,对象的话,又不能在里面let)
  2. 作用域链:内层作用域->外层作用域->…->全局作用域

    其中对于变量的查找只能是由内到外的

const,var和let的区别

let、const、var的区别:①重复声明 ②变量提升 ③暂时性死区 ④块级作用域 ⑤window对象的属性和方法(全局作用域中)

1. 区别一:重复声明
  • var允许重复声明,let、const不允许

    【需要注意的是重复声明指的是:已经存在的变量或常量,又声明了一遍(形参也算已经声明的变量)】
2. 区别二:变量提升
  • var会提升变量的声明到作用域的顶部,但let和const不会(说白了就是let和const没有变量提升)
    (无论是常量还是变量最好还是声明后再进行定义)
3. 区别三:暂时性死区
  • 只要作用域内存在let、const,它们所声明的变量或常量就会自动“绑定”这个区域,不再受外部作用域的影响

    【简单说明一下:这个暂时性死区说白了就是在函数作用域内部声明的变量将会与对应的函数作用域进行绑定(当然没有的话还是会向上查找),当函数内部存在重复声明或者变量提示时,就算外面的作用域已经声明了这个变量,它的运行还是认准的该函数作用域中的声明情况】
4. 区别四:window对象的属性和方法(全局作用域中)
  • 全局作用域中,var声明的变量,通过function声明的函数,会自动变为window对象的变量,属性或方法,但const和let不会
5. 区别五:块级作用域
  • var没有块级作用域,let和const有块级作用域

let、const和var的区别(涉及块级作用域)相关推荐

  1. var/let/const、块级作用域、TDZ、变量提升

    概览 ES6 新增了两个定义变量的关键字:let 与 const,它们几乎取代了 ES5 定义变量的方式:var.let是新的var,const简单的常量声明. function f() {{let ...

  2. 浅谈js中的var和function变量提升,var声明变量提升,块级作用域中的函数提升

    1.首先最常见的一种变量提升 console.log(a); //输出 undefinedvar a=10;console.log(a) // 输出 10 var 有提升的作用其实上面的代码会变成会变 ...

  3. 你真的懂switch吗?聊聊switch语句中的块级作用域

      最近在代码中不小心不规范的,在switch里面定义了块级变量,导致页面在某些浏览器中出错,本文讨论以下switch语句中的块级作用域. switch语句中的块级作用域 switch语句中的块级作用 ...

  4. c语言switch的作用域,你真的懂switch吗?聊聊switch语句中的块级作用域

    最近在代码中不小心不规范的,在switch里面定义了块级变量,导致页面在某些浏览器中出错,本文讨论以下switch语句中的块级作用域. switch语句中的块级作用域 switch语句中的块级作用域可 ...

  5. 详解var、let、const关键词声明变量的区别,以及变量提升、块级作用域的认识等。

    首先回顾一下JavaScript中var声明变量的基础知识: • 在使用var关键词声明变量时,变量在函数外则是全局变量,有全局作用域,全局变量在页面关闭后销毁:变量在函数内则是局部变量,作用局部作用 ...

  6. uniapp 获取到js文件var一个变量怎么获取到这个变量值_浅析Js中const,let,var的区别及作用域...

    理解:let变量的作用域只能在当前函数中 js中const,let,var的区别及作用域_lianzhang861的博客-CSDN博客​blog.csdn.net 全局作用域中,用 const 和 l ...

  7. JavaScript let、const与var的区别

    ES5中的var是没有块级作用域的(if/for) ES5中的let是有块级作用域的(if/for) ES5之前因为if和for都没有块级作用域的概念,所以在很多时候,我们都必须借助于function ...

  8. let、const、var的区别

    var是ES5提出的,let和const是ES6提出的. const声明的是常量,必须赋值 1)一旦声明必须赋值,不能使用null占位. 2)声明后不能再修改 3)如果声明的是复合类型数据,可以修改其 ...

  9. ES6(一)——字面量的增强、解构、let/const、块级作用域、暂时性死区

    一.字面量的增强 ES6中对 对象字面量 进行了增强,称之为 Enhanced object literals(增强对象字面量). 字面量的增强主要包括下面几部分: 属性的简写:Property Sh ...

最新文章

  1. netframework转core时文件响应流问题
  2. HtmlString类创建HTML Hepler 扩展MVC TextBox组件
  3. nyoj1047欧几里得
  4. linux用户简单指令操作
  5. EXT2/EXT3/EXT4文件系统数据恢复工具开发计划
  6. Java笔记08-Map详解
  7. HTML5——section,article,aside
  8. oc引导win方法_[OC更新]机械革命8代、9代标压稳定版更新
  9. 1159: 零起点学算法66——反话连篇
  10. 快手上也可以看电竞赛事了:S9直播观看人数惊人!
  11. Go实战--二维码生成server
  12. 求连续区间和为目标值的一种解题思路
  13. JAVA对象属性方法的使用
  14. Pascal voc 2012 数据集简介
  15. java实现一码多扫支付_详解JAVA后端实现统一扫码支付:微信篇
  16. Clonezilla再生龙备份系统分区详细教程
  17. 最简单最快速csv超大文件入库并统计Top5
  18. 三天学会MySQL - MySQL数据库章节练习
  19. 【新周报(049)】Datawhale组队学习
  20. 最新苹果服务器认证,Sign in with Apple-苹果登录(客户端和服务端)

热门文章

  1. 响应式WebUI框架整理
  2. Python爬虫——获取经纬度
  3. 2020年中国食品包装行业发展现状分析,行业智能化、自动化、多元化发展「图」
  4. python模拟登录密码加密_有关爬虫模拟登陆时,处理用户名密码加密问题的方法...
  5. 基于geotools实现shp图层的合并
  6. 4000字长文爆杀KMP
  7. 使用Python脚本下载Bilibili相簿
  8. 一范数L1和二范数L2
  9. HTC G21 Sensation XL 官方解锁、刷Recovery刷机图文教程
  10. INTEL MKL ERROR