在JavaScript ES6中使用let和const定义变量

JavaScript世界里面的每个人都在说有关ECMAScript 6 (ES6,也称作ES 2015)的话题,对象的巨大变化 (类,super(), 等), 函数 (默认参数等), 以及模块 (导入/导出), 但很少有人关注变量以及如何定义。事实上,还是有一些关注,但是可能关注点并非正确。我最近参加了英国jQuery会议,在会议上Dave Methvin发表了一场关于ES6简介的演讲,演讲内容包含了很多关于let和const的内容。

通过这篇文章,我想介绍var的这两个不同的关键字,以及它们在定义和使用上的区别。并且更重要的,我要确定哪些人正在考虑在ES6中使用声明变量的新标准。基本概念是let应该立刻取代var作为定义的关键字。事实上,按照一些案例,var简单的说不应该再在新代码中使用。const关键字用在那些永远不会改变的变量申明,let用在其他变量申明上。

用let取代var

这个代码示例一看上去似乎比较有戏剧性,但是对我们思考let和var的差异来说,显得不会太多。var在离它最近的父函数内创建了一个变量的作用域let在它最近的块级中创建作用于,这些块包括for循环,if语句以及其他块。

functionfoo(){

console.log(x);

console.log(y);

varx=1;

if(x===1){

lety=2;

}

console.log(y);

}

foo();

console.log(x);

在这个例子中,我们创建了一个foo的函数(以及变量作用域),并且稍后我们调用它。最后一个console.log()语句预期会产生一个ReferenceError,因为x只在foo()中定义(作用域)。因为变量提升,第一个console预计将被正常执行。在这个示例中,x是undefined。第二个console预计更加有趣。事实上,两个log(y)都将出错,因为let比var的作用于更加严格。y变量只存在于if块里面,不在任何其他地方。Dave Methvin称let之前的区域叫做“临时死亡区。”

希望这个例子能够向你展示let的特性,但是你或许会说有时候你实际上想有一个函数范围作用域的变量。没问题,简单的说在函数顶部创建这个变量就好了。

functionfoo(x){

lety= 2;

if(x===1){

y=2;

你可能感兴趣的:(在JavaScript ES6中使用let和const定义变量)