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

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部