ECMAScript6的学习笔记之var,let,const
最近在看es6,就记录一下笔记好供日后参考。
1.变量声明 var
众所周知在es6之前js的变量没有块级,只存在函数内外访问之分;
例如:
var a = 5;if(true){ var b = 3; console.log(a) // 5; var a = 's';}console.log(a) // s;console.log(b) // 3;
从上面的代码可以知道var定义的a在if语句块中一样可以被访问和修改,同样在if语句块里面定义的变量b,在其快外面也一样可以被访问和修改;所以在es6之前用var定义声明一个变量时不会存在if,for这些语句块的作用域。
接下来看一下es6中新增的变量声明let;
2.变量声明let
let也是用来声明变量的,但是所声明的变量,只在let命令所在的代码块内有效。
例如:
if(true){ let b = 3; console.log(b) // 3; var a = 's';}console.log(a) // s;console.log(b) //报错 b is not defined;
也就是在if语句块中用let定义的变量b,出了这个区域块就没法获取到b了,这和var就不一样了;根据这一特性申明很适合在for循环块中申明变量;举一个es5的一个常见问题:
var arr = [];for(var i =0;i<6;i++){ arr[i] = function(){ console.log(i)}}arr[3]();//6
在上面的代码中i是被var定义的没有语句块的限制,当循环结束后他的值被累加到6了,当你再去调用函数去访问i时,不管是arr[3]还是arr[4]或者其他的得到的都会是6;因为它的值在循环结束后已经更新为6了;下面如果我们改成let声明i会怎样呢?
var arr = [];for(let i =0;i<6;i++){ arr[i] = function(){ console.log(i)}}arr[3]();//3
得到的结果是我们想要的.
3.变量常量声明const
(1)const 声明的是常量,一旦声明,值将是不可变的
const PI = 3.1415;PI = 3;// 抛出异常:Assignment to constant variable.不能给一个常量再赋值;console.log(PI) //3.1415
(2) const 也具有块级作用域
if (true) { const a = 5;}console.log(a);// a is not defined;
(3) const声明的常量没有声明提前的效果,也不能被重复声明;
var a = 5; function b(){ console.log(a); var a = 5; } b();//undefind 这里得到的undefined就是因为函数内部有var声明提前造成的;这个例子是题外话,一个比较常见的陷阱 if(true){ console.log(PI);// 抛出一个错误PI is not defined const PI = 3.14 } if(true){ console.log(PI);// 不会报错只会打印出undefined,说明他已经声明了只是没有赋值 var PI = 3.14 } //重复声明 var message = "Hello"; const message = "Goodbye!"; //会报错 Identifier 'message' has already been declared
今天就先记录到这里,以后持续更新~~
关键字:let, const, es6
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!