JavaScript学习笔记 -- ES6学习(二) let 和const
ES6 中新增了两个命令: let 和const.
let命令:
let 用于声明变量,和var 类似,但是所声明的变量只在代码块中有效,不存在变量提升,有暂时性死区。
1.只在代码块中有效
和var 命令不同的是,let 声明的变量只在代码块中有效,例如
{
let a = 1;
var b = 2;
}
console.log(b); // print 2;
console.log(a); // this will cause error.
2. 不存在变量提升
所谓变量提升,就是在同一作用域下,在声明变量之前调用它。
function test() {
temp = "test"
console.log(temp); // will pint test.
var temp;
}
然而使用let声明的变量是不存在变量提升的,也就是说,一定要在声明变量之后使用:
function test() {
temp = "test"
console.log(temp); // reference error.
let temp;
}
3. 暂时性死区
所谓暂时性死区指的是声明的变量不收外部同名变量的影响。例如:
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
暂时性死区的存在,使得typeof不再是一个安全的操作了(因为有可能一个变量因为不能提升而导致引用错误)
4. 另外,let 不允许在同一作用域重复声明
在同一个块级作用域下,var 声明同一个变量是可以的,但是let是不允许的。
5.想要得到块级作用域的变量,可以用do命令:
let x = do {
let t = f();
t * t + 1;
};
const 命令
const 命令用于声明只读常量,和let一样,作用域也是块级作用域,不存在变量提升,也有暂时性死区。
const命令声明常量时,只保证变量名指向的地址不变,也就是说,如果使用const声明的常量指向一个对象,不能够保证对象中的属性值 不被改变。若要想保证对象属性值不变,使用Object.freeze() 来冻结对象。
JavaScript学习笔记 -- ES6学习(二) let 和const的更多相关文章
- JavaScript 学习笔记-- ES6学习(一)介绍以及Babel的使用
本文摘自阮一峰老师的<ECMAScript 6入门>,原文地址:http://es6.ruanyifeng.com/#docs/intro ECMAScript 6 是一个泛指,含义是5. ...
- JavaScript学习笔记--ES6学习(五) 数值的扩展
ES6 对于数值类型 (Number) 进行了一下扩展: 1.对于二进制和八进制提供了新的写法 ES6对于二进制和八进制的数值提供了新的写法,分别用0b (或者0B) 和0o (或者0o) 表示.例如 ...
- JavaScript学习笔记--ES6学习(四) 字符串的扩展
ES6对字符串进行了一些扩展,主要表现在对Unicode 大于\uFFFF的字符的处理上. 1. ES6中字符的Unicode表示方法 在ES5中,字符串的Unicode表示方法: \uxxxx . ...
- JavaScript学习笔记 -- ES6学习(三) 变量的解构赋值
1.解构赋值的定义 在ES6中,允许按照一定模式,从数组和对象中提取值(所谓解构),然后对变量进行赋值. var a = 1; var b = 2; var c = 3; //等价于 var [a, ...
- JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别
JavaScript:学习笔记(7)——VAR.LET.CONST三种变量声明的区别 ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用 ...
- React Native 学习笔记--进阶(二)--动画
React Native 进阶(二)–动画 动画 流畅.有意义的动画对于移动应用用户体验来说是非常必要的.我们可以联合使用两个互补的系统:用于全局的布局动画LayoutAnimation,和用于创建更 ...
- 【Unity Shaders】学习笔记——SurfaceShader(二)两个结构体和CG类型
[Unity Shaders]学习笔记——SurfaceShader(二)两个结构体和CG类型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5596698. ...
- Linux进程间通信IPC学习笔记之同步二(SVR4 信号量)
Linux进程间通信IPC学习笔记之同步二(SVR4 信号量)
- Linux进程间通信IPC学习笔记之同步二(Posix 信号量)
Linux进程间通信IPC学习笔记之同步二(Posix 信号量)
随机推荐
- iOS 设置connect超时
NSLock *theLock; [theLock lock]; int fd, error; struct sockaddr_in addr; ))<) { cout<<" ...
- Solution for When browse http://xxx/ReportServer Show Error (rsAccessDenied)
Issue: Reporting Services Error The permissions granted to user 'IDEAAM\William' are insufficient fo ...
- 实用Yii扩展
可以去官方搜索Yii扩展:Extensions | Yii PHP Framework http://www.yiiframework.com/extensions/?tag=tree Yii che ...
- js基础一
1.声明提升:变量的声明提升,函数的声明提升,但函数赋值表达式不会提升: foo(); // 正常运行,因为foo在代码运行前已经被创建 function foo() {} foo(); // 出错: ...
- 冒泡排序和快速排序的java实现
转发请注明原创地址 http://www.cnblogs.com/dongxiao-yang/p/6264831.html 冒泡 public static int[] bubble_sort(int ...
- [USACO08JAN]电话线Telephone Lines
多年以后,笨笨长大了,成为了电话线布置师.由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人.该市周围分布着N(1<=N<=1000)根据1……n顺序编号的废弃的电话线杆,任意 ...
- Add-VMNetworkAdapterAcl(添加访问控制列表)
Add-VMNetworkAdapterAclCreates an ACL to apply to the traffic through a virtual machine network adap ...
- Unity3D问题之EnhanceScollView选择角色3D循环滚动效果实现
需求 呈现3D效果(2D素材)选择角色效果 滚动保证层级.缩放比例.间距正常尾随 循环滚动 这个界面需求一般也会有游戏会採用(貌似有挺多) 怎样实现 实现技术关键点 (3D循环效果,依据数学函数和细致 ...
- android selector 背景选择器的使用, button (未点击,点击,选中保持状态)效果实现
android selector 背景选择器的使用, button (未点击,点击,选中保持状态)效果实现 首先看到selector的属性: android:state_focus ...
- NSUInteger和NSInteger和int
int和NSInteger其实是差不多的,但更推荐使用NSInteger,因为使用NSInteger,这样就不用考虑设备是32位还是64位了. NSUInteger是无符号的,即没有负数,NSInte ...