轻松弄懂var、let、const之间的区别
ECMAScript 6(简称ES6)是JavaScript语言的下一代标准,于2015年6月正式发布,也称ECMAScript 2015。
ES6的好处
ES6的出现为我们前端带来了很多方便之处,以前用js几十行才实现的一个功能,ES6几行代码就能简单的实现,ES6新增的一些特性,改变了很多弊端之处,比如新出现的let、const,实现了块级作用域功能,减少了以前var的全局变量,箭头函数代替词法作用域的"this" 等等,在这里就不再做更多的举例子,想了解更多请参考 https://www.w3cschool.cn/ecmascript/pgms1q5d.html,今天主要跟大家一起了解一下var、let、const之间的区别
let
let是ES6新增的命令,用来声明变量,跟var声明变量一样。但是它俩有很大的区别。
- let、const声明的变量仅在块级作用域内有效,var 声明变量是全局的,没有块级作用域功能
- let 、const 不存在变量提升 , var 存在变量
- let 、const不能在同一块级作用域内重复申请
用let定义变量,运行代码如下:
const arr = [1, 2, 3, 4]for (let i = 0; i < arr.length; i++) {console.log(arr[i])}console.log(i);
以上报错i未定义,说明let定义变量i,只在所在的块作用域内起作用
var 定义变量,运行代码如下:
var arr = [1, 2, 3, 4]for (var i = 0; i < arr.length; i++) {console.log(arr[i])}console.log(i);
以上运行结果说明,var 定义变量 没有块级作用域,i在块级作用域照样可以输出结果
其实var在函数内命名的变量是只在整个函数作用域内起作用,出了这个函数作用域就不能用了,例如下面
function testVar () {var i = 2console.log('函数内:' + i)}testVar()console.log('函数外:' + i)
很明显在函数外输出变量i的时候,报i未定义,var在函数内命名的变量是只在整个函数作用域内起作用
let不像var那样会发生“变量提升”现象。所以,变量一定要在声明后使用,否则报错。
运行代码如下:
console.log(arg1)console.log(arg2)var arg1 = 'test'let arg2 = 'test2'
变量arg1用var命令声明,会发生变量提升,即脚本开始运行时,变量arg1已经存在了,但是没有值,所以会输出undefined。变量arg2用let命令声明,不会发生变量提升。这表示在声明它之前,变量arg2是不存在的,这时如果用到它,就会抛出一个错误。
var 重复申明变量的运行结果:
var arg1 = 'test'console.log('var第一次申明:' + arg1)var arg1 = 'test2'console.log('var第二次申明:' + arg1)
let 重复声明变量代码
let arg2 = 'test'
console.log('let第一次申明:' + arg2)
let arg2 = 'test2'
console.log('let第二次申明:' + arg2)
let在同一块作用域内不能重复声明变量,var 可以重复声明
const
const与let上面特点一样,但是也有不同点,let声明的是变量,const声明的是常量,只读,修改值会报错,const保存的是内存地址,可以给对象或数组添加属性或元素,但是不能重新复写。
想要了解更多,请扫描二维码
轻松弄懂var、let、const之间的区别相关推荐
- 轻松弄懂var、let、const之间的区别(一看就懂)
ES6的好处 ES6的出现为我们前端带来了很多方便之处,以前用js几十行才实现的一个功能,ES6几行代码就能简单的实现,ES6新增的一些特性,改变了很多弊端之处,比如新出现的let.const,实现了 ...
- 电脑自动关机是什么原因?为什么电脑会自动关机?轻松弄懂
电脑作为很多小伙伴学习.办公.娱乐的工具.在生活中已然是不可或缺的一部分,很多小伙伴在使用电脑的过程中,有时会碰到电脑自动关机的情况.电脑自动关机是什么原因?为什么电脑会自动关机?别担心,今天小编这篇 ...
- 台式电脑怎么连wifi,1分钟轻松弄懂
电脑已经成为了各位小伙伴日常生活中经常会使用的工具.笔记本电脑连接wifi很简单,相信很多小伙伴都会,可是面对台式电脑,很多小伙伴就不知道怎么连wifi了.台式电脑怎么连wifi?别担心,1分钟教你轻 ...
- const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别
const int a; int const a; const int * a; int * const a; int const * const; 之间的区别 const int a; int co ...
- 下班前几分钟,我彻底弄懂了 undefined 和 null 的区别
目录 前言 一.基本概念 1.undefined 2.null 二.简单区别 三.表现形式 1.typeof 2.== 与 === 3.Object.prototype.toString.call 4 ...
- matlab求传递函数在某个频率点的增益_【干货分享】轻松弄懂开关电源TL431环路补偿传递函数推导...
微信公众号:硬核电子. 开关电源常用的TL431环路接法是使用2型补偿器,本文将对这种补偿环路的原理进行说明,并推导传递函数,加深理解的同时,给实际电路设计提供理论指导.本文如有谬误之处,欢迎指正. ...
- axios学习笔记(二):轻松弄懂XHR的使用及如何封装简易axios
使用 XMLHttpRequest(XHR)对象可以与服务器交互.您可以从URL获取数据,而无需让整个的页面刷新.这允许网页在不影响用户的操作的情况下更新页面的局部内容.在 AJAX 编程中,XMLH ...
- JavaScript进阶教程(6)—硬核动图让你轻松弄懂递归与深浅拷贝
目录 一.递归 1.1 概念 1.2 出口 1.3 递归经典问题:递归求斐波那契数列 1.4 递归经典问题:递归求阶乘 1.5 递归求一个数字各个位数上的数字的和 1.6 递归遍历DOM树 二 深浅拷 ...
- 一篇文章带你飞,轻松弄懂 CDN 技术原理
概述 Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加,用户数量也在不断增加,受Web服务器的负荷和传输距离等因数的 ...
最新文章
- novaclient的api调用流程与开发
- 谁还期待iPhone 13?
- Fiori configuration edit also needs enqueue
- equals, hashCode, toString方法重写,深入探究equals
- 这辆迷你摩托车,很酷!
- pygame和python的区别_用Python和Pygame写游戏-从入门到精通(22)
- 输入和用户界面——总结
- Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介
- 如何使用cmd查看本机IP地址
- PHP程序员简历模板
- balenaEtcher-1.5.70可能是最好用的镜像写U盘工具 img to usb dmg to usb支持多种格式内附截图介绍多平台均有
- 最新win10系统激活教程
- 佰维存储通过注册:拟募资8亿 国家集成电路基金是二股东
- 利用QVOD架设流媒体服务器/电影服务器/vod服务器
- 企业文化五因素论(转载)
- 移动端跨平台开发的深度解析
- 呼吸系统疾病病人的护理题库【1】
- 从被遗忘到牛市龙头,一文梳理ETH 2020爆发逻辑
- 平面设计需要学习什么,平面设计是什么;夏雨老师
- lgv50怎么进入fastboot模式_fastboot知识扫盲 高级刷机方式fastboot模式怎么进入?
热门文章
- c++语言int最大值,c++ 关于如何获取int型的最大值
- 怎么开启队友无伤_和平精英暗夜危机无敌点位送上!不仅无伤打僵尸 敌人还看不到你...
- python pillow无法安装_Pillow
- java数据库实例_选择数据库实例
- inno setup 中文乱码问题_解决Inno Setup制作中文安装包在非中文系统上显示乱码的问题...
- FileZilla 服务器端win server2008以上的配置
- 爬虫python下载电影_python爬虫:抓取下载电影文件,合并ts文件为完整视频
- 最常用Python开源框架有哪些?
- Java的native方法
- POJ 2287 - Tian Ji -- The Horse Racing(贪心)