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 ...
随机推荐
- RPC与实践(thrift在windows的编译/安装--c++版)
------------------------------------------------------------------------ RPC 功能目标 RPC 的主要功能目标是让构建分布式 ...
- Linux下编写和加载 .ko 文件(驱动模块文件)
一..ko 文件介绍 .ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能移动到内核外边, 需要的时候插入内核,不需要时卸载. 二.优点 (1)这样可以缩小内核体积 ...
- web-font 个人学习小总结
个人觉得 web-font 分为两种: 第一种就是真正文本字体,客户端没有安装的字体通过远程加载字体来实现特殊字体提高用户体验: icodon.com : http://icodon.com/goo ...
- 弹出框sweetalert插件的简单使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ASP.NET MVC5高级编程 之 数据注解和验证
客户端验证逻辑会对用户向表单输入的数据给出一个即时反馈.而之所以需要服务器端验证,是因为来自网络的信息都是不能被信任的. 当在ASP.NET MVC设计模式上下文中谈论验证时,主要关注的是验证模型的值 ...
- 浅谈深度优先和广度优先(scrapy-redis)
首先先谈谈深度优先和广度优先的定义 深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法.沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的 ...
- Jquery简单使用
展示:$("#id").show(); 隐藏:$("#id").hide();
- Jquery分享插件
效果图如下: 代码如下: <!DOCTYPE HTML> <html style="padding-bottom: 54px;"> <head> ...
- 【转载】 Eclipse注释模板设置详解
Eclipse注释模板设置详解 网站推荐: 金丝燕网(主要内容是 Java 相关) 木秀林网(主要内容是消息队列)
- Oracle12c Release1 安装图解(详解)
Oracle12c Release1 安装图解(详解) Oracle12c 终于发布了,代号为 c,即为 Cloud(云),替代了网格 (Grid)运算. 我的机器基础环境:Windows8(x64) ...