文章目录
ES的全称是ECMAScript,它是由ECMA国际标准化组织制定的一项脚本语言的标准化规范。
ES6实际3上是一个泛指,泛指ES2015及后续的版本。
每一次标准的诞生都意味着语言的完善,功能的加强,JavaScript语言本身也有一些令人不满意的地方。
ES6中新增的用于声明变量的关键字,主要是用来替代var关键字的。
let声明的变量只在所处的块级(大括号)有效。
if(true){
let a = 10;
}
console.log(a)//输出a is not defined
好处:
注意:在一个大括号中,使用let关键字声明的变量才具有块级作用域,使用var声明的变量不具备块级作用域特性。
//在业务逻辑复杂的时候,能够防止内层变量覆盖外层变量
if(true){
let a = 10;
var b = 20;
}
console.log(b)//输出20
console.log(a)//输出a is not defined
//防止循环变量变成全局变量
//---------------使用var关键字-------------------------------
for(var i = 0 ; i< 2; i++){
}
console.log(i);//输出2
//---------------使用let关键字-------------------------------
for(let i = 0 ; i< 2; i++){
}
console.log(i);//输出i is not defined
let关键字的特性:
let关键字不存在变量提升(var关键字可以先使用再声明,这属于语言中的糟粕性东西)
使用let关键字必须先声明后使用
console.log(a)//输出a is not defined
let a = 20;
let暂时性死区(不会受外层作用域影响)
var num = 20;
if(true){
console.log(a)//输出a is not defined
let a = 10;
}
经典面试题
此题的关键点在于变量i是全局的,函数执行是输出的都是全局作用域下的i值。输出的结果都是2。
此题的关键点在于每次循环都会产生一个块级作用域,每个块级作用域中的变量i都是不同的,函数执行是输出的是自己上一级(循环产生的块级作用域)作用域下的i值。输出的结果是0,1。
const关键字是用来声明常量的,常量就是值(内存地址)不能变化的量。
if(true){
const a = 10;
if(true){
const a = 20;
console.log(a);//输出20
}
console.log(a);//输出10
}
console.log(a)//输出a is not defined
const PI;//控制台报错:Missing initializer in const declareation
const PI = 3.14;
PI = 100;//控制台报错: Assignment to constant variable
const arr = [ 100, 200];
arr[0] = 123;
console.log(arr);//输出[123,200]
arr = [1,2];
console.log(arr);//控制台报错: Assignment to constant variable
var | let | const |
---|---|---|
函数级作用域 | 块级作用域 | 块级作用域 |
变量提升 | 不存在变量提升 | 不存在变量提升 |
值可更改 | 值可更改 | 值不可更改 |
本文地址:https://blog.csdn.net/caixuanji/article/details/107289044
如对本文有疑问, 点击进行留言回复!!
网友评论