一、简单认识

1. 用let来声明变量,变量作用域就在{}(块级作用域)中

2. 用const声明变量,变量值不可更改

3. 增加了let以后,在声明变量时应该多考虑一下变量的用途,是否希望只在当前代码块中使用(C++就不同了,它声明的变量都是属于当前代码块的)

二、let命令

1. 在{}中用let定义一个变量,只能在该{}中访问

1 {
2 let a = 10;
3 console.log(a);//10
4 }
5 console.log(a);//a is not defined

2. for循环计数中使用let

  • 定义的i只在本轮循环中有效,每次新的循环中,i都是重新声明的
1 var a = [];
2 for(let i = 0; i < 10; i++){
3 a[i] = function(){
4 console.log(i);
5 }
6 }
7 a[6]();//6,不是10
  • 父子作用域:声明循环变量的是父,而循环体内部是单独的子作用域
1 for(let i = 0; i < 3; i++){
2 let i = "abc";
3 console.log(i);
4 }
5 // 输出三次abc,循环变量i没有被循环体内部定义的i影响

3. 没有变量提升

  • 必须先声明才能使用(和C++一致,而var会把变量提升到作用域最上面)
1 bar = 2;
2 let bar;
3 //报错:bar is not defined

4. 暂时性死区

  • 在有let命令的作用域中,由let声明的变量在未声明前不可使用(即使它的上层作用域中已经声明)。该作用域中,let声明某变量前都是该变量的死区(不可使用)

     var tmp = 123;
    
     if (true) {
    tmp = 'abc'; //tmp is not defined
    let tmp;
    }
  • typeof的问题:未声明前访问也会报错

    1 typeof x;//报错:x is not defined
    2 let x;
    3 typeof y;//"undefined"
  • 赋值语句中的问题,未声明前的变量不可以给其它变量赋值
     let x = x;//x is not defined
    function fun(x = y){
    }
    fun();//y is not defined

5. 不可以重复声明变量

1 let x;
2 let x;//报错:x is already been declared

三、块作用域中声明函数

  • 在块作用域中声明函数与var变量类似,会进行变量提升(到函数作用域或全局作用域,而不是块作用域)
  • 应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句
 1 // 浏览器的 ES6 环境
2 function f() { console.log('I am outside!'); }
3
4 (function () {
5 //var f = undefined;//提升到这里
6 if (false) {
7 //函数f的声明提升到函数作用域或全局作用域头部
8 function f() { console.log('I am inside!'); }
9 }
10 //因为false,所以没对f进行赋值
11 f();//f is not a function
12 }());

四、const命令

  • 一旦声明,必须立即初始化
  • 与let相似的特性:块级作用域、不提升、暂时性死区、不可重复声明
  • 指向的内存地址不可变,但内存的内容可以变
1 const a = [];
2 a.push('Hello'); // 可执行
3 a.length = 0; // 可执行
4 a = ['Dave']; // 报错,不可以修改const变量的指向

五、顶层对象属性

  • 顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象
  • let、const声明的变量不属于顶层对象的属性
     1 var a = 1;
    2 window.a;//1
    3 function b(){
    4 console.log("b");
    5 }
    6 window.b();//b
    7
    8 let c = "c";
    9 window.c;//undefined
    10 const d = "d";
    11 window.d;//undefined

1. let 和 const 命令的更多相关文章

  1. es6学习笔记(1) let和const命令详解

    let和const命令: Es6新增了let命令,声明变量,但与var不一样的,只在let命令所在的代码块内有效(如for循环之外let声明的变量就不再有效).并且let不像var那样会发生" ...

  2. let和const命令//////////////////////z

    let和const命令 let命令 块级作用域 const命令 全局对象的属性 let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的 ...

  3. ES6之let(理解闭包)和const命令

    ES6之let(理解闭包)和const命令 最近做项目的过程中,使用到了ES6,因为之前很少接触,所以使用起来还不够熟悉.因此购买了阮一峰老师的ES6标准入门,在此感谢阮一峰老师的著作. 我们知道,E ...

  4. ECMAScript 6入门 - let和const命令

    详细学习链接: http://es6.ruanyifeng.com/#docs/let let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命 ...

  5. ES6 入门系列 - let 和 const 命令

    let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = ; ; } a // ReferenceEr ...

  6. ES6 之 let和const命令 Symbol Promise对象

    ECMAScript 6入门 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了. (2016年6月,发布了小幅修订的<ECMASc ...

  7. ECMAScript6-let和const命令

    ▓▓▓▓▓▓ 大致介绍 ES6是下一代的JavaScript语言的标准,目标是让JavaScript可以用来编写大型的复杂程序,成为企业级开发语言,要查看浏览器对ES6的支持程度可以用阮一峰大佬写的工 ...

  8. ECMAScript6-let与const命令详解

    前言 <ECMAScript入门>是一本开源的JavaScript语言教程,全面介绍ECMAScript6新引入的语法特性. let和const命令,是第一章开始介绍,也是比较基础的知识. ...

  9. let和const命令

    let命令 1.let用来声明变量,类似于var,但只在代码块内有效. { let a = 1; var b = 2; } console.log(a); //a is not defined con ...

  10. ECMAScript 6 第一天 let和const命令

    ES6新增声明变量的方法let命令,const命令. (ES5只有两种声明变量的方法:var 命令和 function 命令.) let命令,用来声明变量. 与var声明变量不同于: 1.  let声 ...

随机推荐

  1. javascript面向对象精要第六章对象模式整理精要

    混入是一种给对象添加功能同时避免继承的强有力的方式,混入时将一个属性从一个对象 复制到另一个,从而使得接收者在不需要继承的情况下获得其功能.和继承不同,混入之后 对象无法检查属性来源.因此混入最适宜用 ...

  2. Java中FTPClient上传中文目录、中文文件名乱码问题解决方法【好用】

    转: Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录 ...

  3. java代码示例(4—1(作业))

    package com.java.union4; import static org.junit.Assert.*; import org.junit.Test; public class Demo ...

  4. 20190313 org.apache.commons.lang3.builder.EqualsBuilder的两种典型用法

    org.apache.commons.lang3.builder.EqualsBuilder的两种典型用法 public boolean equals(Object obj) { if (obj == ...

  5. php脚本#!/usr/bin/env php 写法

    脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它. 比如php脚本的第一行可以写成如下几种格式 #!/usr/bin/php #!/usr/bin/env php # ...

  6. HostAliases向Pod中添加hosts解析

    前言 根据公司同一个项目需要不同的de/te/pe环境,由于相应环境调用的数据库等配置信息存在不同等因素,需要向Kubernetes集群中的Pod添加对应的hosts解析. 解决 以下以yaml文件自 ...

  7. 06-开闭原则(OCP)

    1. 背景 在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试. 2. 定义   ...

  8. 简述var、let、const三者的区别

    前二者为定义变量,const一般用来定义常量. 1.var声明变量可以重复声明,而let不可以重复声明 var name = 'xiaohuang'; var name = 'xiaolan'; co ...

  9. beef框架使用

    http://resources.infosecinstitute.com/beef-part-2/ http://resources.infosecinstitute.com/beef-part-1 ...

  10. luogu 1030 求先序遍历

    此题给出中序遍历和后序遍历后的序列,乍一看确乎想不出法子解决,毕竟是逆向思维: 但是后序遍历的特殊性质 son1,son2,x 使得后序的末尾便是根节点,再由中序天然的递归性质便可递归输出,用下fin ...