ES6学习笔记之 let与const
在js中,定义变量时要使用var操作符,但是var有许多的缺点,如:一个变量可以重复声明、没有块级作用域、不能限制修改等。
//缺点1:变量可以重复声明
var a=1;
var a=2;
console.log(a); //2
//缺点2:无法限制修改
//缺点3:没有块级作用域
{
var b=12;
}
console.log(b); //12
ES6新增的let和const就解决了这些问题。下面我们来看看let和const吧。
- let和const都不能重复声明
let a=1;
let a=2;
console.log(b); //SyntaxError: Identifier 'a' has already been declared - let声明的是变量,值可以修改;const声明的是常量,不能修改
const a=1;
a=2;
console.log(a); //TypeError: Assignment to constant variable. - 有块级作用域
var a=[];
for(var i=0; i<5;i++){
a[i] = function (){
console.log(i);
}
}
a[2](); //5上面这个例子中,变量i是var定义的,作用域是在全局,全局只有一个i,每一次循环,变量i的值都会+1,循环结束后,i的值为5。所有数组a的成员,a[0]...a[4]里面的i都是同一个,所以最后输出的是5。
let a=[];
for(let i=0; i<5;i++){
a[i] = function (){
console.log(i);
}
}
a[2](); //2上例中,i是用let声明的,仅在块级作用域有效。数组a的每一个成员都有一个自己的 i,所以最后输出的是2。
另外,值得注意的是,for循环设置循环变量的那部分是父作用域,循环体内是单独的子作用域。如下例。for(let i=0; i<2; i++){
let i=12;
console.log(i);
}
//12
//12 - 不存在变量提升
console.log(a); //undefined
var a = 1; console.log(b); //ReferenceError: b is not defined
let b = 2;var命令会出现变量提升的现象,即可以在声明之前使用变量,值为undefined。let 则不行,变量必须要在声明之后才能使用,否则就会向上例一样报错。
- const的本质
const并不是保证变量的值不能改变,而是变量指向的内存地址里面保存的数据不能发生改变。对于基本数据类型的数据,变量指向的内存地址中就直接保存它的值;对于复合类型的数据,如数组和对象,变量指向的内存地址中保存着的是一个指向实际数据的指针。const a = 12; //变量a指向的内存地址中存放着数字12
//person指向的内存地址中存放着的是对象的地址,const只能保证存着的这个对象地址不变,
//但对象本身是可变的,可以修改属性等 const person = {
name: 'lisi',
age: 18
}
person.age = 19;
console.log(person.age); //19
person = {}; //TypeError: Assignment to constant variable. - 顶层对象的属性
顶层对象在浏览器环境下指的是window对象。var a = 1;
console.log(window.a); //1
let b = 2;
console.log(window.b); //undefinedvar和function声明的全局变量,依旧是window对象的属性,let和const、class声明的全局变量,不属于window对象的属性。
ES6学习笔记之 let与const的更多相关文章
- ES6学习笔记(一)——let和const
1.ES6学习之let.const (1).var.let.const 变(常)量声明 ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景. 在ES6中let就诞生了,实际上它 ...
- es6学习笔记1 --let以及const
let语句的基本用法: 1.let声明的变量为块级作用域,只在最近的{}里面有效,如果在外部引用就会报错. { let a = 10; var b = "hello" } ale ...
- ES6学习笔记(1)----let和const命令
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ let和const命令 let 总结1.声明变量基本使用方法与var 相同 不同点 a.在代 ...
- ES6学习笔记<一> let const class extends super
学习参考地址1 学习参考地址2 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015:也 ...
- es6学习笔记-class之一概念
前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
- ES6学习笔记<四> default、rest、Multi-line Strings
default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...
- ES6学习笔记<三> 生成器函数与yield
为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...
- ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
随机推荐
- 28.HashSet
4.HashSet集合 4.1HashSet集合概述和特点[应用] 底层数据结构是哈希表 不能保证存储和取出的顺序完全一致 不可以存储重复元素 没有索引,不能使用普通for循环遍历 4.2HashSe ...
- jQuery 实现 全选/全不选/反选
<button id="getall" class="btn btn-warning">全选</button><button id ...
- spring为何要注入接口,而注入接口的实现类就会报错
首先说明,注入的对象确实为实现类的对象.(并不是实现类的代理对象,注入并不涉及代理) 如果只是单纯注入是可以用实现类接收注入对象的,但是往往开发中会对实现类做增强,如事务,日志等,实现增强的AOP技术 ...
- Django(34)Django操作session(超详细)
前言 session: session和cookie的作用有点类似,都是为了存储用户相关的信息.不同的是,cookie是存储在本地浏览器,session是一个思路.一个概念.一个服务器存储授权信息的解 ...
- [bug] conda:Segmentation fault (core dumped)
参考 https://www.jianshu.com/p/5e230ef8a14d
- [c++] STL 标准算法
_if 1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 using names ...
- 常用的HTML标记
一.格式标记 1.<br> <br>是一个单标记,用来强制换行. 2.<p> <p>是双标记.用来换分段落. 3.<center> < ...
- 烽火SATA SSD DSS200-B
烽火SATA SSD DSS200-B 运营商用户 > 产品与解决方案 > 产品 烽火SATA SSD DSS200-B 烽火通信 DSS200-B 2.5" SATA SSD ...
- centos7下cups + samba共打印服务
centos7下cups + samba共打印服务 2015年8月21日admin发表评论阅读评论 这个算是rhce课程的篇外篇,Samba除了提供文件共享外,也可以像windows下的共享一样提 ...
- dpkg -S /usr/lib/mate-notification-daemon/mate-notification-daemon
# dpkg -S /usr/lib/mate-notification-daemon/mate-notification-daemonmate-notification-daemon: /usr/l ...