ES6中const、let与var的对比详解
对比
声明方式 变量提升 作用域 初始值 重复定义
const 否 块级 需要 不允许
let 否 块级 不需要 不允许
var 是 函数级 不需要 允许
变量提升:const 和 let 必须先声明再使用,不支持变量提升
console.log(c1, l1, v1);
// 报错
// Uncaught ReferenceError: c1 is not defined const c1 = 'c1';
let l1 = 'l1';
var v1 = 'v1';
作用域:const,let 支持块级作用域,有效避免变量覆盖
const c21 = 'c21';
let l21 = 'l21';
var v21 = 'v21'; if (0.1 + 0.2 != 0.3) {
const c21 = 'c22';
let l21 = 'l22';
var v21 = 'v22'; console.log(c21, l21, v21);
// 输出 c22 l22 v22
} console.log(c21, l21, v21);
// 输出 c21 l21 v22
块级作用域,在外层不能直接访问内层变量
if (0.1 + 0.2 != 0.3) {
const c22 = 'c22';
let l22 = 'l22';
var v22 = 'v22'; console.log(c22, l22, v22);
// 输出 c22 l22 v22
} console.log(c22, l22, v22);
// 报错
// Uncaught ReferenceError: c22 is not defined
// 同样地, l22 is not defined
const 定义常量,该常量不能赋值,但该常量的属性可以赋值
const c231 = {};
const c232 = []; c231.name = 'seven';
c232.push(27); console.log(c231, c232);
// 输出 {name: "seven"} [27] // 禁止给对象赋值,应该使用 Object.freeze const c233 = Object.freeze({});
const c234 = Object.freeze([]); c233.name = 'seven';
// 普通模式下不报错
// 严格模式下报错
// Uncaught TypeError: Cannot add property name, object is not extensible c234.push(27);
// 普通模式下就会报错
// Uncaught TypeError: Cannot add property 0, object is not extensible console.log(c233, c234);
// 输出 {} []
全局变量不再设置为顶层对象(window)的属性,有效避免全局变量污染
const c24 = 'c24';
let l24 = 'l24'; console.log(c24, l24);
// 输出 c24 l24 console.log(window.c24, window.l24);
// 输出 undefined undefined
初始值:const 声明的变量必须设置初始值,且不能重复赋值。
const c3 = 'c3';
let l3 = 'l3';
var v3 = 'v3'; console.log(c3, l3, v3);
// 输出 c3 l3 v3 c3 = 2; // Uncaught TypeError: Assignment to constant variable
l3 = 2;
v3 = 2; console.log(c3, l3, v3);
// 输出 c3 2 2 const c32;
// 报错
// Uncaught SyntaxError: Missing initializer in const declaration
重复定义:const 和 let 不支持重复定义
const、let 缩小了变量作用域,完美避免变量污染;const 固定变量(即固定变量类型),对于弱类型 JavaScript 来说,可以明显提升性能。推荐在应用中使用 const、let 声明变量。
ES6中const、let与var的对比详解的更多相关文章
- php中const与define的使用区别 详解
1.const用于类成员变量定义,一旦定义且不能改变其值.define定义全局常量,在任何地方都可以访问. 2.define不能在类中定义而const可以. 3.const不能在条件语句中定义常量 i ...
- ES6,ES2105核心功能一览,js新特性详解
ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...
- vue和react全面对比(详解)
vue和react对比(详解) 放两张图镇压小妖怪 本文先讲共同之处, 再分析区别 大纲在此: 共同点: a.都使用虚拟dom b.提供了响应式和组件化的视图组件 c.注意力集中保持在核心库,而将其他 ...
- SVN组成中trunk,branches and tags功能用法详解
SVN组成中trunk,branches and tags功能用法详解 我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的运用SVN来管理开发代码的版本,下面我就摘录一篇文章来简单说 ...
- Windows8 各种版本区别对比详解
微软的 Windows8 操作系统提供了4个不同的版本,分别是 Windows RT.Windows 8 标准版.Windows 8 Pro 专业版 以及 Windows 8 Enterprise 企 ...
- javascript中的Base64.UTF8编码与解码详解
javascript中的Base64.UTF8编码与解码详解 本文给大家介绍的是javascript中的Base64.UTF8编码与解码的函数源码分享以及使用范例,十分实用,推荐给小伙伴们,希望大家能 ...
- vue2.x版本中computed和watch的使用入门详解-computed篇
前言 在基于vue框架的前端项目开发过程中,只要涉及到稍微复杂一点的业务,我们都会用到computed计算属性这个钩子函数,可以用于一些状态的结合处理和缓存的操作. 基础使用 在computed中,声 ...
- vue2.x版本中computed和watch的使用入门详解-watch篇
前言 watch顾名思义,属于vue2.x版本中,监听和观察组件状态变化的钩子函数,常见的应用场景有监听路由变化,以及父组件传递给子组件的props数据的变化等 基本使用 在使用watch的时候,需要 ...
- vue2.x版本中computed和watch的使用入门详解-关联和区别
前面两篇介绍了computed和watch的基本使用 watch篇 computed篇 两者的区别,继续通过代码实现的方式具体去了解 html <li>最开始的value值:{{ name ...
随机推荐
- LwIP Application Developers Manual9---LwIP and multithreading
1.前言 lwIP的内核并不是线程安全的.如果我们必须在多线程环境里使用lwIP,那么我们必须使用“upper”API层的函数(netconn或sockets).当使用raw API时,你需要自己保护 ...
- ethtool 解决网卡丢包严重和网卡原理【转】
转自:https://blog.csdn.net/u011857683/article/details/83758869 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...
- MySQL用户授权【转】
MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. grant selec ...
- web服务器上某一中文名文件无法访问
只需要在此目录下 convmv -f GBK -t UTF-8 --notest *.xxx 执行这个命令即可
- 获取图片的EXIF信息
对于专业的摄影师来说,Exif信息是很重要的信息,也包含了非常多的东西 1.EXIF EXIF(Exchangeable Image File)是“可交换图像文件”的缩写,当中包含了专门为数码相机的照 ...
- Nginx负载均衡实例
upstream MyServers{ server 192.168.63.137; server 192.168.63.138; server 192.168.63.140; } server{ l ...
- Mudo C++网络库第六章学习笔记
muduo网络库简介 高级语言(Java, Python等)的Sockects库并没有对Sockects API提供更高层的封装, 直接用它编写程序很容易掉到陷阱中: 网络库的价值还在于能方便地处理并 ...
- Android中验证输入是否为汉字、手机号及邮箱
1,验证是否为汉字 Code// 验证昵称 private boolean verifyNickname() { String nickname = edt_username.getText().to ...
- spark-streaming集成Kafka处理实时数据
在这篇文章里,我们模拟了一个场景,实时分析订单数据,统计实时收益. 场景模拟 我试图覆盖工程上最为常用的一个场景: 1)首先,向Kafka里实时的写入订单数据,JSON格式,包含订单ID-订单类型-订 ...
- SpringCloud服务提供者
服务提供者就是提供一个服务暴露出来给别人调用,在springcloud中需要注册服务到服务中心 搭建服务提供者项目(ProduceDemo) 1.创建pom.xml <project xmlns ...