前言
首先,一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系?
ECMAScript是一个国际通过的标准化脚本语言。JavaScript由ECMAScript和DOM、BOM三者组成。可以简单理解为:ECMAScript是JavaScript的语言规范,JavaScript是ECMAScript的实现和扩展。
2011 年,ECMAScript 5.1 版发布。之前我们大部分人用的也就是ES5
2015 年 6 月,ECMAScript 6 正式通过,成为国际标准。
好了,回归我们的正题。
本文说的这个话题对于一些老鸟来说可能根本算不上疑问,但对于新手来说也许除了最常见的var之外,let和const较少使用的机会。
所以在本文中,我将会通过一些例子来为大家介绍如何在Javascript中灵活使用var、let和const这些关键字来定义变量,以及这些关键字它们之间有什么异同。
如果你懒得看下面的代码,那我可以先把概念结论说出:
- var定义的变量可被更改,如果不初始化而直接使用也不会报错
- let定义的变量和var类似,但作用域在当前声明的范围内
- const定义的变量只可初始化一次且作用域内不可被更改,使用前必须初始化
下面我将通过示例的形式来详细为大家介绍它们三者之间的异同:
Var
var用以声明一个变量,并且同时我们可以在声明语句中初始化所声明的变量。
例如:
var a = 10;
- 变量的声明,会在代码被执行之前被处理。
- 用var声明的JavaScript变量,其可用范围在当前执行上下文。
- 在函数外声明的JavaScript变量,其作用范围是全局。
考虑以下代码片段:
function nodeSimplified() { var a =10; console.log(a); // 输出 10 if(true) { var a=20; console.log(a); // 输出 20 } console.log(a); // 输出 20 }
在上面的代码中,你可以发现,当变量a在if代码段里被更新时,它的值被全局更新了,因此在经过了if代码后,被更新的值仍然被保留着。这与其他语言中的全局变量有点类似。但是,在使用这个功能时要非常小心,因为它有可能会覆盖一个已有的值。
let
let语句在一个块级范围里声明一个局部变量。和var类似,我们可以在声明时初始化它的值。
例如:
let a = 10;
- 这个语句允许你创建一个变量,使它的作用范围被限制在它所在的代码块。
- 它和Java、C#等其他语言的变量类似。
考虑下面的代码片段:
function nodeSimplified() { let a =10; console.log(a); // output 10 if(true) { let a=20; console.log(a); // output 20 } console.log(a); // output 10 }
它和大多数语言中我们所见的表现行为是一致的。
function nodeSimplified() { let a =10; let a =20; // 抛出语法错误 console.log(a); }
错误信息:"未捕获的异常:标识符'a'已经被声明过。" 但如果使用var就没事:
function nodeSimplified() { var a =10; var a =20; console.log(a); // 输出 20 }
使用let语句,可以很好的维护变量的作用范围。当使用内部函数时,let语句让你的代码更整洁。
我希望上面的例子能帮你更好地理解var和 let。如果有任何疑问,请在评论区留言。
const
const语言中的变量只能被赋值一次,然后就不能在被赋值。const语句的作用范围和let语句一样。
例如:
const a = 10; function nodeSimplified() { const MY_VARIABLE =10; console.log(MY_VARIABLE); // 输出 10 }
照例,命名规范指出我们应该用大写字母声明常量。当然,const a = 10 在上面的代码中会的起到相同的作用。为了让代码长期可维护,命名规范还是值得遵守的。
问题:如果给一个const变量重新赋值会发生什么? 考虑下面的代码:
function nodeSimplified() { const MY_VARIABLE =10; console.log(MY_VARIABLE); // 输出 10 MY_VARIABLE =20; // 抛出类型错误 console.log(MY_VARIABLE); }
错误信息:"未捕获的类型错误:给const变量赋值"。
当我们尝试给已有的const变量赋值时,这段代码会抛出一个错误。
介绍就到此结束,希望这篇短小精悍的文章能够帮助到各位更好的理解在Javascript中声明变量时使用不同关键字上到底有何异同。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]