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 = 2
console.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之间的区别的更多相关文章

  1. let、var、const声明的区别

    前言 看了方应杭老师的一篇解释let的文章,对JavaScript中的声明有了深刻的理解,这里也就有了总结一下JavaScript中各种声明之间区别的这篇文章. JavaScript中变量声明机制 首 ...

  2. var let const的一些区别

    var let const 都是来定义变量的. var let 作用域有些区别. const 类似于java中的常量的概念.即:只能给一个变量赋值一次,即指定一个引用. 举例来说: function ...

  3. var、let、const之间的区别

    var声明变量可以重复声明,而let不可以重复声明var是不受限于块级的,而let是受限于块级var会与window相映射(会挂一个属性),而let不与window相映射var可以在声明的上面访问变量 ...

  4. 请问微信小程序let和var以及const有什么区别

    在JavaScript中有三种声明变量的方式:var.let.const. var:声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用. [JavaScript] 纯文 ...

  5. let和var以及const有什么区别

    在JavaScript中有三种声明变量的方式:var.let.const. var:声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用. for(var i=0;i&l ...

  6. ES6 var,const , let三者区别

    每天学一点,知识涨一张 var 默认是会变量提升的,变量可以修改: let 定义变量,变量可以修: const 定义必须有常量值,const的值一但写上不可更改:let 与const相同之处:1> ...

  7. 微信小程序let和var以及const有什么区别

    在JavaScript中有三种声明变量的方式:var.let.const. var:声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用. for(var i=0;i&l ...

  8. 彻底弄懂px,em和rem的区别

    国内的设计大师都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢? px特点: 1.IE无法调整那些使用px作为单位的字体大小: 2.国外大部分网站能够调整的原因 ...

  9. var和const和let的区别

    简述: 1.前端的变量申明,可以用到var,ES6的const(衡量)/let(变量) 2.在ES5用的都是var,到ES6之后,也就是2015年开始出现const/let. var 不会报错,有声明 ...

随机推荐

  1. codeforce 378 div 2 F —— Drivers Dissatisfaction (最小生成树,LCA,倍增)

    官方题解: If you choose any n - 1 roads then price of reducing overall dissatisfaction is equal to min(c ...

  2. Tomcat最佳线程数

    什么是最佳线程数? 为满足更多用户访问需求,可以调整Tomcat线程数,但是不能太大,否则导致线程切换开销,随着用户递增(线程数也随之调整),系统QPS逐渐增加,当用户量达到某个值,QPS并不会增加, ...

  3. H3C 动态路由协议的基本原理

  4. 解决从旧格式的 csproj 迁移到新格式的 csproj 格式 AssemblyInfo 文件值重复问题

    现在很多小伙伴开始使用了 dotnet core 项目,但是如果是从以前的 dotnet framework 的项目修改为 dotnet core 项目格式,会发现编译的时候出现了 AssemblyI ...

  5. 2018-10-19-jekyll-添加-Valine-评论

    title author date CreateTime categories jekyll 添加 Valine 评论 lindexi 2018-10-19 09:10:40 +0800 2018-2 ...

  6. 负margin的原理及应用

    在很多布局中我们经常能够见到类似于margin:-10px;的用法,我们对正值的用法早已熟悉的不能再熟悉了,可是这负值到底有何用呢?听我给你吹. 负margin——普通文档流 普通文档流元素(不浮动, ...

  7. Oracle如何分组排序并产生序号

    SELECT C.ORG_SHORTNAME, B.USER_NAME, ROW_NUMBER () OVER ( PARTITION BY B.ORG_ID ORDER BY A.TOTAL_SCO ...

  8. 《提升能力,涨薪可待》-Java并发之AQS全面详解

    欢迎关注公众号[Ccww笔记],原创技术文章第一时间推出 一.AQS是什么?有什么用? AQS全称AbstractQueuedSynchronizer,即抽象的队列同步器,是一种用来构建锁和同步器的框 ...

  9. 如何看Crash 文件

    如何查看崩溃日志 好了,获得是人类可读语言的崩溃日志后,或者是从别人手机到处崩溃日志后,下一步就是查看了.下面就正对一个程序猿该如何看稍微说说. 崩溃日志头     1 2 3 4 5 6 7 8 9 ...

  10. Spring||IQ

    Here's the question about spring 1.Spring概述 Spring 是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应 ...