ES6--let声明变量,const声明常量

ECMA2015(也称es6),在原先javascript语法基础上新增语法特征,浏览器对es6的语法支持还不够,需要借助babel解析工具(可在gulp的配置文件gulpfile.js中配置针对bable的命令);

关于作用域:除了全局作用域和函数内作用域,es6新增了块级作用域,即用{}包裹的代码块。块级作用域:内层变量和外层变量的值互不影响。内层无法读取外层,外层无法读取内层。

{

console.log(b); //报错,

{let a=12;let b=0;}

console.log(a) //报错,

}

ES6允许在块级作用域内定义函数(但在老的浏览器中还是报错,所以该特性还是尽量不用);

let:es6中声明变量新增的方式

特性:

①声明仅在所在的代码区块内有效;(es6新增块级作用域)

{let a=12} ;

alert(a); //报错,a is not define

该特性可用于在for循环中声明变量

for(let i=0;i<10;i++){} //变量i仅在循环体内部生效。

console.log(i) //i is not define

②不存在变量提升;

alert(a) //undefined

alert(b)// 报错, b is not defined

var a=12;

let b=11;

③暂时性死区;

在一段代码区块内,使用let或const声明变量,在变量声明前对变量的使用都会报错。即使在代码块外部有同名的全局变量。

var abc=100;

{

abc=23; //referenceError 声明前使用,报错

let abc; //当let或const在代码块内声明了,则在代码块中形成了封闭的区域,在该封闭区域内变量声明前的使用都会报错。

console.log(abc); //undefined

abc=10;

console.log(abc)//10

}

const命令:es6新增声明常量方式;

特性:

①声明时就需要赋值,否则报错;常量一旦声明不可以重新赋值,否则报错;

②在所在的代码区块内有效;(同let);

③不存在变量提升;

④存在暂时性死区;

⑤声明复杂型常量时,const仅仅保存了地址,常量中的属性还是可以变更的;

例如:const obj={};

const arr=[];

arr.push(12);

arr.length=0;

arr  = ['hello']  //报错

obj.a=1;

console.log(obj.a)   //  1

obj={'b':2}  //报错

(可冻结对象,冻结后对象属性将不能修改;Object,freeze({'需要冻结的对象参数'}));

REPL:nodejs中的交互运行环境,可执行javascript语句。

全局对象;原有javascript的全局对象是window,给全局对象的属性赋值相当于声明一个全局变量。

在ES6中,let和const命令声明的变量和常量不再是全局对象的属性。

var a=1;

let b=2;

window.a   //1

window.b  // undefined

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容