ES6学习笔记第二章

let 和 const命令

1 let命令

用法:

ES6新增let命令,用于声明变量,用法类似var,只是let声明的变量是块级作用域内有效

例:

{

let a = 10;

var b = 1;

}

a // a is not defined

b // 1

根据返回值可以看出,let声明变量时的作用域只在其代码块内

for 循环的计数器就很适合使用let来声明变量。

var a = [];

for (var i = 0; i<10; i++){

a[i] = function(){

console.log(i);

};

}

a[6]();//10

如果用let声明变量i;

a[6]();//6

因为let声明的i只在本轮循环内有效。所以每次循环的i其实都是新的变量,于是输出6。

let声明变量不存在变量提升;

例:

console.log(foo);

let foo = 2;

执行会报错,但是如果用var声明,得到的结果就是2。

暂时性死区:

只要块级作用域内存在let命令,它所声明的变量就“绑定这个区域”,不受外部影响。

var tmp =123 ;

if(true){

tmp = ‘abc‘;

let tmp;

}

报错,let绑定了if内的块级作用域,在let声明变量前,对tmp赋值会报错。

ES6明确规定,如果区块 存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域。

在代码块内,使用let命令声明变量之前,该变量都是不可用的。语法上称“暂时性死区”,简称TDZ。

let不允许在相同作用域内重复声明同一个变量。(这个就不解释了)

2.块级作用域到底是个啥

ES5只有函数作用域和全局作用域,没有块级作用域,那么会带来以下不合理情况:

例1

var tmp = new Date();

funciton f(){

console.log(tmp);

if(false){

var tmp = "hello world";

}

}

f() //undefined;

变量提升内层tmp变量覆盖了外层的tmp变量

例2

for 循环计数的变量泄露为全局变量。

ES6的块级作用域

function f1(){

let n = 5;

if(true){

let n = 10;

}

console.log(n);//5

}

最后输出5,表明外层代码不受内层代码块的影响。如果使用var, 最后的输出值为10.

ES6允许块级作用域任意嵌套;

另外ES6规定,函数本身作用域在其所在的块级作用域内。

fuction f(){ console.log(1)};

(function (){

function f(){
            console.log(2);
        }

f();

}());

ES5//2,

ES6//1。

严格模式下,函数只能在顶层作用域和函数内声明,其他情况(if,for)下的声明都会报错。

3.const命令

const 用来声明常量。 一旦声明,其值不可改变。

const 作用域等同于let,只在声明所在的块级作用域内有效。

const 命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须非常小心。

const a=[];

a.push("hello");//可执行

a.length = 0; //可执行

a = [‘Dave‘];// 报错。

数组本身是可写的,但是要把另一个数组赋值给a,就会报错。

如果想让对面被冻结,本身也不可写,应该使用Object.freeze方法。

ES6一共6中声明变量的方法:

var function let const import class

4.跨模块常量

// constants.js 模块

export const A= 1;

export const B= 3;

export const C= 4;

// test1.js 模块

import * as constants from ‘./constants‘;

console.log(constanst.A);//1

console.log(constanst.B);//3

//test2.js模块

import {A,B} from ‘./constants‘;

console.log(A);//1

console.log(B);//3

5.全局对象的属性

ES5:

window.a = 1;

a //1;

a = 2;

window.a //2

ES6:

let b = 1;

window.b // undefined;

ES6规定 var 命令和function 命令声明的全局变量依旧是全局对象的属性

let命令 、 const命令、 class命令声明的全局变量不属于全局对象的属性

时间: 2024-10-15 02:18:23

ES6学习笔记第二章的相关文章

Mysql Cookbook学习笔记第二章

1,使用python链接mysql + ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # -*- coding: utf-8 -*- # connect.py --连接到MySQL服务器 import sys import MySQLdb try:     conn = MySQLdb.connect(db = "cookbook",                            host = "localhost"

【PMP】Head First PMP 学习笔记 第二章 组织、约束和项目

第二章 组织.约束和项目 如果你希望正确地完成工作--最好有一个正确的组织. 项目联络人 项目联络人(project expediter),只是记录项目的进展情况,但是没有权利对项目做任何决策.他可能参与项目,但是并不管理任何事务. 不同类型的组织项目 职能型 项目经理的决策需要和职能经理确认 项目经理作为职能经理的助手,协助职能经理完成工作 项目经理大部分时间都用于行政任务,通常只有部分时间投入到项目管理中 在职能型组织中往往会有项目联络人 矩阵型 弱矩阵型 项目经理有一些经理有一些权利,但是

c#高级编程第七版 学习笔记 第二章 核心c#

第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用System.Console执行控制台I/O 使用内部注释和文档编制功能 预处理器指令 C#编程的推荐规则和约定 2.1 第一个c#程序 2.1.1 代码 using System; namespace Wrox { Public class MyFirstClass { static void Ma

Android学习笔记—第二章 Android四大组件

第二章 Android四大组件 Activity(活动窗口): Android程序中最基本的模块,为用户操作而展示的可视化用户界面.一个Android应用程序可以只有一个Activity,也可以包含多个Activity,数量及每个Activity的作用取决于应用程序及其设计. (1)Activity的生命周期 创建→运行   onCreate   onStart   onResume 运行→销毁   onPause    onStop    onDestory 运行→停止(不可见  不可操作)

《操作系统概念》学习笔记-第二章

第二章 操作系统结构 在具有多个命令解释程序选择的系统中,解释程序被称为外壳(shell) 命令解释程序的主要作用是获取并执行用户指定的下一条命令. 有三种应用程序员常用的API,适用于windows系统的win32API,适用于POSIX系统的POSIX API,以及用于设计运行于JAVA虚拟机程序的JAVA API. 操作系统传递参数有三种方法: 最简单的方法是通过寄存器来传递参数,不过有时,参数数量会比寄存器多,这时,这些参数通常存在内存的块和表中,并将块的地址通过寄存器来传递.Linux

信息检索导论学习笔记 -- 第二章:词项词典及倒排记录表

2.1.1 文档分析及编码转换:      文档处理第一步,是将文件或web服务器上的一系列二进制字节序列转换为字符序列.      在实际中,首先要判断出文档的编码方式(机器学习分类.启发式等方法),确定文档的类型(word?zip?)然后将字节序列转换成字符序列. 2.1.2 文档单位(document unit)的选择:      常见的,将某个目录下的每个文件都看成一个文档.      但有些情况并非如此,比如我们可能希望将邮件.附件(附件中的文件)分开.      对于一个长文档而言,

Solr in action学习笔记 第二章Getting to know Solr

2.1Getting started *Solr实际是使用http通信,所以可以使用任何语言的API *Solr的一个core包含solr配置文件,lucene索引文件和solr的日志文件 在分布式系统的上下文中,成为collection *Solr还提供COre Admin API *query 当query参数设置好,实质上是向solr服务器发送一个http GET请求 搜索参数: 可以自己写到url里,尽量记住常用的搜索参数,对照solrJ的写法 SolrQuery parameters

JavaScript高级程序设计学习笔记第二章

1.向 HTML 页面中插入 JavaScript 的主要方法,就是使用<script>元素 2.HTML 4.01中定义了<script>元素的六个属性(方便记忆,可将6个属性分为3组) 第一组: async:可选.表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本.只对外部脚本文件有效.(使用<script>不属于外部脚本) defer:可选.表示脚本可以立即下载,但是延迟到文档完全被解析和显示之后再执行.只对外部脚本文件有效. 第

《spring实战》学习笔记-第二章:装配bean

2.1 Spring配置的可选方案 当描述bean如何进行装配时,Spring具有非常大的灵活性,它提供了三种主要的装配机制: (1)在XML中进行显式配置. (2)在Java中进行显式配置. (3)隐式的bean发现机制和自动装配. 建议是尽可能地使用自动配置的机制.显式配置越少越好.当你必须要显式配置bean的时候(比如,有些源码不是由你来维护的,而当你需要为这些代码配置bean的时候),我推荐使用类型安全并且比XML更加强大的JavaConfig.最后,只有当你想要使用便利的XML命名空间