本文基于阮一峰大佬的es6标准入门自行摸索而成,对文章内容做了精简和归纳,选取最直接有用部分,后文不再赘述
![图片[1]-es6,let var const 变量声明](https://ldlseo.com/wp-content/uploads/2020/11/image-15.png)
ES6是下一代JavaScript语言标准的统称,每年6月发布一次修订版,迄今为止已经发布了3个版本,分别是ES2015、ES2016、ES2017。事实上每年都有新的改进版本出现,es6是通向node的必修语言,本文将同时连带node自学内容一并带入。
js可以直接不进行声明使用变量,变量可以直接是字符串或者数字,甚至可以是数组或者对象,这种变量通常是全局的
<script>
i = 1;
j="aaa";
</script>
;
但是并不推荐持续使用这样的声明方式,通常用var来声明变量,好处是var在函数内部进行声明,不会污染函数外部的变量
<script>
i = 1;
function test()
{
i = 2
}
test();
console.log(i)//输出为2 ,实际上这种情况不是我们想要的,我们希望内部变量不会操作外部的变量,当然,一个良好的变量命名规则这时候就会体现出来了,通常我并不推荐取一些没有命名意义的变量,比如 i j k这种
</script>
为了解决这种问题,我们引入了var,var算是一种比较临时的变量,他在函数内部进行声明,就不会污染刀外部的变量。
<script>
i = 1;
function test()
{
var = 2
}
test();
console.log(i)//输出为1
</script>
但是var随之而来的有变量提升问题,什么是变量提升:函数外部声明了变量,这时候函数内部也声明了变量,但是内部生命前进行输出,就会报未定义错误,可以认为当函数内部定义与外部同名变量的时候,整个函数和主程序有一定程度的割裂。
<script>
var i = 1;
test()
console.log(i)// i
function test()
{
console.log(i)//undefine
i =2;
console.log(i)//2
}
</script>
其实这种情况如果是编译语言不会有什么问题,因为默认来说,编译语言的默认参数必须作为形参传入函数内部才可以使用,对外部的全局变量,也必须使用this来指向说明变量所属。所以这个问题特殊就特殊在是js的语法导致了这个问题。
这时候就必须引入let进行变量声明,let就像是js专用的内部临时变量,只要是括号里头都可以这么认为
<script>
var i = 1;
test()
function test()
{
let i = 2;
}
</script>
这时候内部的i和外部的i完全是两个变量。
值得一提的是let在同一个作用域里头不允许重复声明
let i = 1
let i =2//这样是不允许的
至于还有一个const,常量,为了解决js没有常量的问题,所谓常量就是不可改变值的变量。不可以重复定义了
const i = 1
const i =2
Uncaught SyntaxError: Identifier 'i' has already been declared
从这些例子可以看得出来,es6是对js之前语法不规范做的补充,特别是const,我们知道js一般都是写在页面里头的,根本不需要常量,因为页面一跳转就没法用了,常量不常量根本不重要,但是偏偏加了常量,这是为了js的语法更全面更规范的在node.js里头使用才这么做的,比起页面来说,node更像是python,php这种更加完备的语言,所以为了实现这个目标,对js做了补充,这就是es6以后版本的作用与意义。es6是一个规范,而node是对规范的实现,事实上实现不只是node,还有很多浏览器都对这些语法做了实现。