1.什么是ES6
ES6,全称为ECMAScript 6.0,是JavaScript语言的下一代标准,于2015年6月正式发布。其目标是使JavaScript语言能够用于编写复杂的大型应用程序,并成为企业级开发语言。ES6是ECMAScript的第六个版本,是JavaScript的规范,提供语言的语法和基本对象。
ES6引入了许多新的语法特性,如let和const关键字用于声明变量和常量、箭头函数提供更简洁的函数语法、模块导入导出实现模块化开发等。这些新特性使得开发者能够更高效地编写代码,减少错误,并提高代码的可读性和可维护性。
需要注意的是,虽然ES6是JavaScript的下一代标准,但它并不是一种框架,而是一种语言的标准。因此,开发者在使用ES6时,无需额外引入任何框架或库,只需在支持ES6的环境中编写代码即可。
同时,为了兼容旧版本的浏览器或环境,开发者可以使用Babel等转码器将ES6代码转换为ES5代码,以便在旧环境中运行。此外,大多数现代浏览器已经支持ES6的大部分特性,因此开发者可以直接在浏览器中使用ES6编写代码。
2.辨析var、let、const关键字
- var 关键字的缺点
- let
- const
在javascript中的声明方式只有var
但是在var声明中会遇到一些问题
1.变量提升问题
function getNumber(isNumber){
if(isNumber){
var num = 7;
}else{
var notNum = "not number!";
consele.log(num);
这段代码运行后会出现num未定义,由于javascript的提升机制
实际它在作用域的运行效果是:
function getNumber(isNumber) {
var num;
var notNum;
if (isNumber) {
num = "7";
} else {
notNum = "not number!";
console.log(num);
}
}
getNumber(false);
在这个运行机制下变量进行了声明但是未赋初值,所以在引用的时候会报错。
2.变量重复声明问题
var
关键字声明的变量可以重复赋值但是也会遇到问题例如for里面嵌套两个变量i 嵌套会出现问题
在编程中,当你使用嵌套的for
循环(即一个for
循环内嵌套另一个for
循环)并且在这两个循环中都使用了相同的变量名(如i
)时,如果这两个循环没有正确地隔离或初始化这个变量,那么内层循环的迭代会覆盖外层循环中该变量的值。这意味着在内层循环执行时,外层循环的变量i
的值会被改变,这通常不是你想要的结果,因为它会干扰外层循环的正常执行。
3.非块作用域问题
用var作用域有两种,全局作用域和函数作用域。两者均不是块作用域所以也遵循提升机制。
function data(a){
for(var i;i<6;i++){}
document.write(i);
}
data();
在这里由于提升机制,这个i在for里面,使用后并未销毁在外部仍然可以访问。
1.为了解决提升机制这个问题ES6提供了let,它是块级的。
使用let来声明,在{ }号中,let的声明会进入暂时的死区,未声明是不可以使用的。
let 声明变量可以重新赋值,但是在在同一区域不可以重新声明。
2.解决非块级作用域问题
var关键字是非块级,但是let关键字声明的为非块级。
function fuc(){
for(let i;i<5;i++){}
document.write(i);
}
fuc();
这个时候我们再次与运行就不会报错了,i也会正常的销毁。
3.介绍const的用法
const用来声明一个固定常量,一旦声明就不更改它的值。
但是,使用 const
关键字定义的引用类型还是可以通过数组下标去修改值。
因为值引用和地址引用不同。数组里面引用的是地址。
可以理解为一个小房子,但是里面住的人是可以换的。
let arr = ["I like JavaScript", "I just finished HTML", "You can try anything",] for(let i = 0;i<arr.length;i++){ console.log(arr[i].slice(2,8)); }
- var 语句的作用域是函数作用域或者全局作用域;它没有块作用域,故不存在暂时死区;它可分配,也可重复性声明。
- let 语句属于块作用域,受到暂时死区的约束;它可分配,但不可重新声明。
- const 语句也属于块作用域,同样受到暂时死区的约束;它既不可重新分配,也不可重新声明。