一、let

1、let块作用域

if(true){
var a=1;
let b=2;
}
console.log("a:"+a);//a:1
console.log("b:"+b);//Uncaught ReferenceError: b is not defined

2、let常用于for循环

  var a=[];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i); //6 //变量i是let声明的,当前的i只在本轮循环有效。所以每一次循环的i其实都是一个新的变量,于是最后输出的是6
};
}
a[6]();

3、typeof不再是一个百分之百安全的操作

   console.log(typeof x);//undefined
console.log(typeof y);//Uncaught ReferenceError: y is not defined
var x=2;
let y=3;

typeof运行时y尚未声明,所以报错。

4、隐蔽的暂时性死区

    //正确
function bar(x=2, y=x) {
return [x, y];
}
console.log(bar());//[2,2]
//报错
function bar(x=y, y=2) {
return [x, y];
}
console.log(bar());//Uncaught ReferenceError: y is not defined

5、不允许重复声明

不能在函数内重复声明参数

function bar(arg) {
let arg;//Uncaught SyntaxError: Identifier 'arg' has already been declared
}

二、const

1、const声明的变量也是块作用域,但是不能被多次修改

let a=10;
const b=20;
console.log(a);
console.log(b);
a=100;
b=200;//Uncaught TypeError: Assignment to constant variable.

2、const 声明变量时必须赋值

const a;//Uncaught SyntaxError: Missing initializer in const declaration

3、const可以指定为对象

const常亮指向对象的指针不能变,对象本身是可以改变的

let user={name:"starof",age:25};
const LOVE_YOU=user;
console.log(user);
/*LOVE_YOU=1;//报错*/
user.age=18;
console.log(user);

三、babel【update20170605】

下面代码在es5中输出inside,在es6中输出outside。

如果确定是在es5中还是在es6中运行?可以通过babel使其在es6中执行。

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="js/browser.js"></script>
</head>
<body>
<script type="text/babel">
function f() {
console.log("outside");
}
(function () {
if (true) {
//重复 声明f
function f() {
console.log("inside"); //babel解析为es6所以输出outside
}
}
f();
}())
</script>

四、全局变量和全局对象的属性【update20170605】

es6中规定:

var和function声明的全局变量,依旧是全局对象的属性

let,const声明的全局变量不属于全局对象的属性

以下代码输出什么结果?

let b=1;
console.log(window.b++);//NaN

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/6919624.html有问题欢迎与我讨论,共同进步。

es6 let和const的更多相关文章

  1. (1)ES6中let,const,对象冻结,跨模块常量,新增的全局对象介绍

    1.let声明变量,var声明变量,而const声明的常量 2.let与var的区别 let可以让变量长期驻扎在内存当作 let的作用域是分块[ {快1  {快2 }  }每个大括号表示一个独立的块 ...

  2. ES6 let和const详解及使用细节

    ES6之前javascript只有全局作用域和函数作用域,所以经常会遇到变量提升了或者使用闭包的时候出错的问题. 所有a[i]都会输出10: var arr=[]; for (var i=0;i< ...

  3. ES6 let和const命令(3)

    const 用来声明常量.一旦声明,就不能改变. const在声明必须初始化,只声明不赋值会出错 const的作用域与let一样,只在声明的块级作用域有效. const命令声明的常量也不提升,同样存在 ...

  4. es6 let和const命令(1)

    基本用法 ES新增了let命令,用于声明变量.其用法类似于var,但是所声明的变量只在let命令所在的代码块中有效. for(let i = 0;i<5;i++) {} console.log( ...

  5. JavaScript ES6 let、const

    在ES6中,增加了2个声明变量的关键字:let 和 const.在这里将详细介绍let与var的区别.Babel对let的处理以及const的简单使用. 1. let 在ES6规范中增加了 let 关 ...

  6. es6 let 和 const

    function test(){ let a = 1 for (let i =0;i<3;i++){ console.log(i)         //1,2 } console.log(i)  ...

  7. ES6的 let const 以及块级作用域

    let声明变量 用法类似于var,但是所声明的变量只在let所在的代码块内有效. 1 . 在ES6环境下,let声明的变量不能在声明之前调用. 例: console.log(i); //会报错,这叫做 ...

  8. es6的let,const

    1.es6 新增的let const 命令 let用来定义一个局部变量,故名思意就是只在当前代码块可用 1.1 let 声明的变量不存在变量提升(var 声明的变量存在变量提升)且代码块内 暂时性死区 ...

  9. es6中let,const区别与其用法

    ECMAScript 是什么? 首先,我们都知道JavaScript由三部分组成:ECMAScript,DOM,BOM: 其中的ECMAScript是Javascript的语法规范. ECMAScri ...

随机推荐

  1. sublime修改侧边栏字体

    安装了sublime的material主题后,侧边栏的字体特别小,设置方法如下: 安装插件 用上面的插件打开 Material-Theme.sublime-theme 如下 { "class ...

  2. u3d发送邮件

    http://gad.qq.com/article/detail/22810 https://www.douban.com/note/655356118/ http://gad.qq.com/arti ...

  3. 第八次作业(课堂实战)- 项目UML设计(团队)

    1. 团队信息 队名:小白吃队 成员: 后敬甲 031602409 卢泽明 031602328 蔡文斌 031602301 葛亮 031602617 刘浩 031602423 黄泽 031602317 ...

  4. zabbix3.2监控vcenter和exsi信息

    简介 为了解 ESXI虚拟主机的运行状况,通过zabbix进行监控,图形展示ESXI虚拟主机当前的状态,避免因为esxi服务器因为资源利用率过高导致 概述 从 Zabbix 2.2.0 开始支持对 V ...

  5. python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查

    python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...

  6. 【Android开发经验】android:windowSoftInputMode属性具体解释

    本文章来自CSDN博客:http://blog.csdn.net/zhaokaiqiang1992.转载请注明地址! 在前面的一篇文章中,简单的介绍了一下怎样实现软键盘不自己主动弹出,使用的方法是设置 ...

  7. STM32应用实例十五:STM32的ADC通道间干扰的问题

    最近我们在开发一个项目时,用到了MCU自带的ADC,在调试过程中发现通道之间村在相互干扰的问题.以前其实也用过好几次,但要求都不高所以没有太关注,此次因为物理量的量程较大,所以看到了变化. 首先来说明 ...

  8. Socket通讯成功案例

    Socket通讯案例 #region 服务端 //int port = 1234; //string host = "127.0.0.1"; //IPAddress ip = IP ...

  9. xpath 根据根节点找数据

  10. 解决在编程方式下无法访问Spark Master问题

    我们可以选择使用spark-shell,spark-submit或者编写代码的方式运行Spark.在产品环境下,利用spark-submit将jar提交到spark,是较为常见的做法.但是在开发期间, ...