ES6-let和const
来源:互联网 发布:南昌航空大学网络课程 编辑:程序博客网 时间:2024/05/16 10:33
一.let
let命令的基本用法和 var 差不多,几乎一样,就是用来声明变量的,为什么有了var 还要有一个let呢?我找到了几个答案
1.es6之前,js和普通的程序开发语言有很大不同,它的一些特点(缺点)让它够不上一项程序语言的标准。其中在变量声明这一点有些不合理。es6推荐使用let声明变量就是想要让js逐渐走上一条标准的开发语言之路。
2.var 不废除,也是为了兼容,估计有一天var就会看不见了 。总之,let让js开发更标准,更易理解,更减少错误,等。
1.let不存在变量提升
变量提升: 变量在声明之前就可以使用(undefined), 表现类似于变量在所有执行代码之前就已经声明过。 (var 是变量提升的)
a = 123var a ;console.log(a) //123 a = 123let a;console.log(a) //error
优点: 开发中不必担心随手声明了变量,有可能导致变量覆盖,污染,而且使得开发更加严谨,出错率少。
2.let变量的暂时性死区
暂时性死区: 代码块内,变量声明之前,变量不可用,前提是这个代码块内必须存在这个变量的声明,如果不存在,访问外部作用域。
let a = 456if(true){ a = 123 //error let a;}这个特性使得typeof方法不一定安全,也是为了让开发者习惯于在变量声明之后再使用变量。
3.let变量不允许重复声明
确切的说是不允许在同一作用域中重复声明
二.块级作用域
es6之前只有全局和函数作用域,不存在块级作用域,所以出现了一些很奇怪的现象
var tmp = new Date();function f() { console.log(tmp); if (false) { var tmp = 'hello world'; }}f(); // undefined
if代码块里面的内容在不存在块级作用域的情况下,相当于直接在函数中,也就是说,函数中存在tmp变量声明(变量提升),所以输出undefined,可是这个结果和想要的不一样。
var s = 'hello';for (var i = 0; i < s.length; i++) { console.log(s[i]);}console.log(i); // 5
循环使用的变量变成了全局变量,因为不存在块级作用域,所以直接是全局作用域。
1.es6块级作用域
es6新增了块级作用域,这个块级作用域基于let命令,在代码块中,使用let命令声明变量,则在这个代码块中形成自己的作用域(只用let命令声明的变量有效,var 无效)
function f1() { let n = 5; if (true) { let n = 10; } console.log(n); // 5}
2.函数声明在块级作用域中
es5不允许在代码块中声明函数,但是es6允许,es6在代码快中声明的函数相当于使用let一样的性质,存在块级作用域。
块级作用域总结: es6的块级作用域是存在的,这一切的基础在于-变量需要let声明,函数则没有限制
三.const
const 用来声明常量,它和let用相同的特性,只是它声明的变量指向的值不可修改而已(不存在变量提升,暂时性死区都存在),所以常量也需要先声明再使用啊。
注意: const 变量指向的值不可改变,仔细想想,在声明基本类型(字符串,数字,bool),它的变量确实是不可改变的,因为变量指向‘值’, 但是在声明引用类型(对象)的时候,指向的值就是引用的指针而已,指针不可以改变,但是其中的值可以改变啊。
const foo = {};// 为 foo 添加一个属性,可以成功foo.prop = 123;foo.prop // 123// 将 foo 指向另一个对象,就会报错foo = {}; // TypeError: "foo" is read-only
在用const 声明引用类型变量的时候,一定要注意。
这里使用的的例子,参照阮一峰的es6入门
阅读全文
0 0
- 【ES6】let和const
- es6 let和const
- ES6-let和const
- es6 let和const
- 【ES6系列】let和const
- ES6学习-let和const
- ES6 中的 let 和 const
- es6中的const和let
- es6 let 和 const 命令
- ES6的let和const
- ES6 let和const命令
- es6浅学-let和const
- 深入浅出ES6(十四):let和const
- ES6学习--let和const命令
- 《ES6入门》let和const总结
- ES6学习笔记之《let 和 const》
- ES6之一(let和const)
- ES6(一) let和const命令
- Windows socket 之WSAAsyncSelect模型
- CONDITIONAL EXECUTION
- Linux常用命令操作--个人笔记
- React学习(二)JSX语法
- 批量数据导入Redis(Mass Insertion)
- ES6-let和const
- linux snort centos搭建入侵检测系统snort及问题总结与解答
- mysql编程规范
- Linux 命令1
- 【干货】测试Android应用安全性
- SVN服务器搭建
- 救救服务器!IT人三伏天都怎么过?
- SwipeRefreshLayout + RecyclerView 实现上拉加载下拉刷新
- ios蓝牙开发(二)ios连接外设的代码实现