(声明, 本文的所有代码均在node的最新稳定版本v4.4.3中执行的, 如果在浏览器中执行请把JS的运行环境提升为ES6)

  以前一直用var定义变量, 现在有了两种新的定义变量的方式, 1: let, 2: const;本文大概概括下使用letconst定义变量有哪些好处;

  let:

    1:声明提前

  使用var声明变量,存在声明提前的问题, 输出的tmp为"undefined":

{
var tmp = new Date(); let f = function (){
console.log(tmp); //undefined
if (false){
//使用var声明变量的声明提前;
var tmp = "hello world";
}
} f();
}

  如果我们把定义tmp的方式改为let呢? 那么tmp输出的结果为当前的日期。

{
var tmp = new Date(); let f = () => {
console.log(tmp); //输出的结果为当前的日期
if (false){
//使用let的方式声明, tmp的作用域只有在离他最近的一个{}括号中;
let tmp = "hello world";
}
} f();
}

    2:块状作用域

  letconst不但拥有块状作用域, 还也不存在声明提前这个玩意儿, 以下代码会报ReferenceError

{
let tmp = ;
{
tmp = ;
let tmp = ;
}
}

  使用let声明的元素作用域更加明确, 不会出现作用域混乱的情况, 可以减少bug的产生;

{
let foo = ;
{
let foo = ;
foo = ;
}
console.log(foo);
}

  以上这段代码相当于是IIFE(立即执行函数表达式), 效果和以下的相同;

{
var foo = ;
(function(){
var foo = ;
foo = ;
}());
console.log(foo);
}

  再来猜猜这个的结果是什么,( var 形式声明的变量会提升到{}外面去哦 , {}形式的块状作用域相当于是if(true){//code}的写法):

{
var foo = ;
{
var foo = ;
foo = ;
}
console.log(foo);
}

    3:重复声明

  使用let声明的变量不能重复声明,否则会出现一下错误:

SyntaxError: Identifier 'a' has already been declared

  注意: 在全局下用let声明变量和用var声明变量还是有区别的:

<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8"/>
</head>
<body>
<script>
"use strict";
let foo = ;
console.log(window.foo); //输出 undefined
var bar = ;
console.log(window.bar); //输出1
</script>
</body>
</html>

  const:

  使用const定义的常量, 而且定义一次以后不能再进行更改, 否者会报错;

  使用const定义的常量, 拥有let一样的特性(无声明提前有块状作用域, 重复声明);

  但是要注意, 如果给常量定义的是对象,只要该对象指向在内存中的地址不发生改变, 数据可以随便改的(这涉及到计算机的传值和传址);

  对象:

{
const foo = {};
foo.bar = ;
console.log(foo.bar);
}

  数组:

{
const foo = [];
foo.push();
foo.push();
console.log(JSON.stringify(foo));
}

  这些新语法让JS更加规范, 也更加适合大项目, 我仿佛猜到以后要用private和public声明变量了....( ╯□╰ )

  参考:

  阮一峰:http://es6.ruanyifeng.com/#docs/let

  https://github.com/DrkSephy/es6-cheatsheet#var-versus-let--const

作者: NONO
出处:http://www.cnblogs.com/diligenceday/

QQ:287101329

微信:18101055830

ES6新特性:let和const的使用的更多相关文章

  1. ES6新特性概览

    本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...

  2. Atitit js版本es5 es6新特性

    Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...

  3. ES6新特性简介

    ES6新特性简介 环境安装 npm install -g babel npm install -g babel-node //提供基于node的REPL环境 //创建 .babelrc 文件 {&qu ...

  4. 必须掌握的ES6新特性

    ES6(ECMAScript2015)的出现,让前端开发者收到一份惊喜,它简洁的新语法.强大的新特性,带给我们更便捷和顺畅的编码体验,赞! 以下是ES6排名前十的最佳特性列表(排名不分先后): 1.D ...

  5. 你不知道的JavaScript--Item24 ES6新特性概览

    ES6新特性概览 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代 ...

  6. javascript ES6 新特性之 扩展运算符 三个点 ...

    对于 ES6 新特性中的 ... 可以简单的理解为下面一句话就可以了: 对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中. 作用类似于 Object.assign() ...

  7. 前端入门21-JavaScript的ES6新特性

    声明 本篇内容全部摘自阮一峰的:ECMAScript 6 入门 阮一峰的这本书,我个人觉得写得挺好的,不管是描述方面,还是例子,都讲得挺通俗易懂,每个新特性基本都还会跟 ES5 旧标准做比较,说明为什 ...

  8. ES6新特性三: Generator(生成器)函数详解

    本文实例讲述了ES6新特性三: Generator(生成器)函数.分享给大家供大家参考,具体如下: 1. 简介 ① 理解:可以把它理解成一个函数的内部状态的遍历器,每调用一次,函数的内部状态发生一次改 ...

  9. 34.js----JS 开发者必须知道的十个 ES6 新特性

    JS 开发者必须知道的十个 ES6 新特性 这是为忙碌的开发者准备的ES6中最棒的十个特性(无特定顺序): 默认参数 模版表达式 多行字符串 拆包表达式 改进的对象表达式 箭头函数 =&> ...

  10. Atitit js es5 es6新特性 attilax总结

    Atitit js es5 es6新特性 attilax总结 1.1. JavaScript发展时间轴:1 1.2. 以下是ES6排名前十的最佳特性列表(排名不分先后):1 1.3. Es6 支持情况 ...

随机推荐

  1. JavaScript打开窗口与关闭页面操作大全

    JavaScript新开窗口 onClick="javascript:window.location='http://www.sowsoy.com'" JavaScript新开一个 ...

  2. 规范化注释 VVDocumenter的使用方法

    很多时候,为了快速开发,很多的技术文档都是能省则省,这个时候注释就变得异常重要,但是每次都要手动输入规范化的注释,着实也麻烦,但有了VVDocumenter,规范化的注释,主需要输入三个斜线“///” ...

  3. Centos下Apache使用Symlink访问外部目录出现403

    在Aapche 的document root 下创建软链到其他目录时, 无法从浏览器访问, 返回403错误. 主要检查两点: 1. 软链目标目录的每一级, 都要对所有人开放执行权限, 即对各级目录 c ...

  4. JQuery学习

    首先要明白一点,JQuery是一个JS的封装库,目的是为了关注点分离,让前端更加侧重于界面显示,而不是各个浏览器不同的差异性,下面是JQuery的一些常用的基本用法 一,JQuery语法 window ...

  5. 条件注释判断浏览器版本<!--[if lt IE 9]>

    <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--><!--[if IE]> 所有的IE可识别 <![e ...

  6. servlet 中文乱码问题

    两步骤搞定: 1,修改tomcat的server.xml <Connector port="8080" protocol="HTTP/1.1" conne ...

  7. HP DL60 Gen9 安装CentOS 6.5

    由于Gen 9的VID中自带RETHAT 5.X-7.0的驱动, 所以不需要制作驱动盘. 一, 准备工作 1. 制作 CentOS安装盘 2. 配置阵列, 开机过了自检后按F10. 自己看着配... ...

  8. 利用performance属性查看网页性能

    一般我们可以通过浏览器的调试工具-网络面板,或者代理工具查看网页加载过程中的各个阶段的耗时.而利用window.performance属性则可以获得更为精确的原始数据,以毫秒为单位,精确到微秒. pe ...

  9. Qt中的qreal

    在桌面操作系统中(比如Windows, XNix等)qreal其实就是double类型:而在嵌入设备系统中,qreal则等同于float 类型.

  10. 判断Laravel Eloquent获取数据结果集是否为空

    在使用Laravel Eloquent模型时,我们可能要判断取出的结果集是否为空,但我们发现直接使用is_null或empty是无法判段它结果集是否为空的. var_dump之后我们很容易发现,即使取 ...