这两个命令是ES6的新语法知识。这两个新的特性解决了ES6中的一些小的“bug”问题。其中包含一些知识:块级作用域、let命令、const命令、全局对象的属性。Google V8引擎已经部署了ES6的部分特性。当然,使用Traceur转码器、Bebal转码器可以将ES6方式编写的程序转为ES5.

块级作用域


一个花括号{}代表一个块级作用域,作用域嵌套时外层代码块不受内层代码块的影响,之前的立即执行匿名函数的作用是为了形成局部作用域,防止变量污染,但是这个新的特性:块级作用域的出现也就不需要这个函数咯,噢耶!

需要注意:函数本身的作用域,在其所在的块级作用域中。ES5存在函数提升,不管函数在何处声明,函数声明都会提升到当前作用域的顶部,得到执行。但是ES6支持块级作用域,其内部声明的函数都不会影响到外部作用的外部。

我们来测试一下之前ES5的var声明的效果

var name = "aa";
while (true) {
var name = "bb";
console.log(name);//bb
break;
}
console.log(name);//bb

这里我理解为:while作用域内部的name变量提升到了外部,导致内部的name变量替换了外部作用域中的name变量,所以两次输出都是bb。

let命令

JavaScript中声明变量的方式有三种:var,let,const。var存在变量提升,这是ECMAScript5中的命令,ES5中只有全局作用域和函数作用域。在ES6中才有块级作用域。

let命令的用法类似var,但是所声明的变量,只有let命令所在代码块内有效。如果不声明就使用就会报错,这在语法上称为“暂时性死区”。不允许在相同作用域内,重复声明同一个变量。因此,不能在函数内部重新声明参数不存在变量提升

const命令

const用来声明常量,一旦声明,常量的值就不能改变。

使用时注意:

  • 对常量重新赋值不会报错,只会默默的失败。
  • 与let命令相同,只在声明所在的块级作用域内有效
  • const命令也不存在提升,只能在声明的位置后面使用,提前使用同样会抛出ReferenceError。
  • 同样不可重复声明。
  • const命令只是指向变量所在的地址,如果将const变量赋值为一个对象,则此常量储存的是一个地址,不可变的只是这个地址,但对象本身是可以变的,依然可以为其添加新属性。如果真的想将对象冻结,应该使用Object.freeze方法。冻结之后,不但不可以修改存储地址,对象本身的内容也不能被改变。
  • const有一个很好的应用场景:就是当我们引用第三方库的时候声明的变量,用const来声明可以避免未来不小心重名而导致bug。

全局对象的属性

全局对象是最顶层的对象,在浏览器环境指的是window对象,在Node.js指的是global对象。所有的全部变量都是全局对象的属性。

ES6规定,var命令和function命令声明的全局变量,属于全局对象的属性;let命令,const命令,class命令声明的全局变量,不属于全局对象的属性。

ES6中的一些新特性的更多相关文章

  1. es6中的部分新特性

    1.es6中变量声明可以使用let声明变量,用const声明常量.例: test:function(){ { var num=10; let num1=11; const num2=12; } con ...

  2. ES6系列之项目中常用的新特性

    ES6系列之项目中常用的新特性 ES6常用特性 平时项目开发中灵活运用ES6+语法可以让开发者减少很多开发时间,提高工作效率.ES6版本提供了很多新的特性,接下来我列举项目中常用的ES6+的特性: l ...

  3. ES6的十大新特性(转)

    add by zhj: 该文章是由国外一哥们写的,由腾讯前端团队翻译,图片中的妹子长得挺好看的,很养眼,嘿嘿.我目前在学习ES6,这篇文章把ES6的 几个主要新特性进行了归纳总结,犹如脑图一般,让人看 ...

  4. Jdk5.0中出现的新特性

    掌握jdk5.0中出现的新特性1.泛型(Generics)2.增强的"for"循环(Enhanced For loop)3.自动装箱/自动拆箱(Autoboxing/unboxin ...

  5. MVC中的其他新特性

    MVC中的其他新特性 (GlobalImport全局导入功能) 默认新建立的MVC程序中,在Views目录下,新增加了一个_GlobalImport.cshtml文件和_ViewStart.cshtm ...

  6. C#6.0 中的那些新特性

    C#6.0 中的那些新特性 前言 VS2015在自己机器上确实是装好了,费了老劲了,想来体验一下跨平台的快感,结果被微软狠狠的来了一棒子了,装好了还是没什么用,应该还需要装Xarmain插件,配置一些 ...

  7. iOS中的项目新特性页面的处理

    一般项目中都会出现新特性页面,比如第一次使用应用的时候,或者在应用设置里查看新特性的时候会出现. 这里,选择新建一个专门处理项目新特性的控制器,来完成功能. 首先是 NewFeaturesViewCo ...

  8. Xcode中StoryBoard Reference 新特性的使用

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  9. 浅析Oracle 12c中Data Guard新特性

    浅析Oracle 12c中Data Guard新特性   写在前面 无论是做Oracle运维的小伙伴还是老伙伴,想必对Oracle数据库的数据级灾备核心技术—Data Guard是再熟悉不过了!这项从 ...

随机推荐

  1. 排序中topK那点事(转)

    问题描述:有 N (N>1000000)个数,求出其中的前K个最小的数(又被称作topK问题). 这类问题似乎是备受面试官的青睐,相信面试过互联网公司的同学都会遇到这来问题.下面由浅入深,分析一 ...

  2. 完全教程 Aircrack-ng破解WEP、WPA-PSK加密利器

    其 实关于无线基础知识的内容还是挺多的,但是由于本书侧重于BT4自身工具使用的讲解,若是再仔细讲述这些外围的知识,这就好比讲述DNS工具时还要把 DNS服务器的类型.工作原理及配置讲述一遍一样,哈哈, ...

  3. Python标准库笔记(4) — collections模块

    这个模块提供几个非常有用的Python容器类型 1.容器 名称 功能描述 OrderedDict 保持了key插入顺序的dict namedtuple 生成可以使用名字来访问元素内容的tuple子类 ...

  4. KVM初始化过程

    转载:http://blog.csdn.net/dashulu/article/details/17074675 之前打算整理一下在Guest VM, KVM, QEMU中IO处理的整个流程,通过查阅 ...

  5. Laravel 5.2 一、安装与目录结构

    一.Laravel 安装 这里选择通过 Composer 的 create-project 命令来安装 Laravel 应用. composer create-project laravel/lara ...

  6. source insight 保存时删除多余空格,去除多余空格 space tab键【转】

    转自:http://blog.csdn.net/lanmanck/article/details/8638391 上传源码时最好把空格行去掉,以前介绍了使用notepad++,现在发现,习惯用sour ...

  7. 图论-单源最短路-SPFA算法

    有关概念: 最短路问题:若在图中的每一条边都有对应的权值,求从一点到另一点之间权值和最小的路径 SPFA算法的功能是求固定起点到图中其余各点的的最短路(单源最短路径) 约定:图中不存在负权环,用邻接表 ...

  8. Linux下批量Kill多个进程的方法

    转自http://www.jb51.net/LINUXjishu/43534.html ps -ef|grep tt.py|grep -v grep|cut -c 9-15|xargs kill -9 ...

  9. linux命令(5):netstat命令

    网络监控:netstat –in [显示所有配置接口的状态] 查看端口状态:netstat -anlp | grep 8080 [显示8080端口列出的监听状态] 查看某个进程软件名:netstat ...

  10. 多路复用I/O模型epoll() 模型 代码实现

    epoll模型 int epoll_create(int maxevent) //创建一个epoll的句柄 然后maxevent表示监听的数目的大小int epoll_ctl(int epollfd, ...