【ES6篇】let和const
一、块级声明
声明那些只能在函数内部、大括号之内才可以访问的变量,拥有以下特点:
- 函数内部
- "{"和"}"之间
二、变量提升机制
在全局/函数作用域,使用var声明的变量,不管在哪里声明的变量,都会被当成在当前作用域顶部声明的变量,代码清单如下:
function init(){
if (false) {
var food='三明治';
}
console.log(food);
}
init();//这里可以访问food,其值为"undefined"
function show(){
{
var food='三明治';
}
console.log(food);
}
show();//这里可以访问food,其值为"三明治"
function display(){
for (var index = 0; index < 8; index++) {
;
}
console.log(index);
}
display();//这里可以访问index,其值为"8"
运行结果如下:
[Running] node "e:\BlogPlan\ES6\block.js"
undefined
三明治
8
[Done] exited with code=0 in 0.095 seconds
三、let声明
有时候变量声明提升会给我们造成很多困扰,代码并没有按照我们预期的那样执行,但是在ES6中,let声明帮助我们解决了这些问题,let用法与var相同,使用let声明的变量不会提升,它会将变量限制在块级作用域中,下面将会介绍let声明带来的一些好处。我们可以将上面代码中的var声明替换为let声明,代码清单如下:
function init(){
if (false) {
let food='三明治';
}
console.log(food);//这里无法访问food,会报错,food is not defined
}
init();
function show(){
{
let food='三明治';
}
console.log(food);//这里无法访问food,会报错,food is not defined
}
show();
function display(){
for (let index = 0; index < 8; index++) {
;
}
console.log(index);//这里无法访问index,会报错,index is not defined
}
display();
从上面代码可以看出来,let声明的变量只会作用在块中,块外访问时,将会抛出错误。
使用let声明还可以带来一些好处,比如无法在同一个块中,声明重复的变量名,可以在不同的块中,声明重复的变量名,代码清单如下:
{
var name='Harley';
var name='Chang';
let name='Harley'//
}
e:\BlogPlan\ES6\tempCodeRunnerFile.js:2
var name='Harley';
^
SyntaxError: Identifier 'name' has already been declared
{
let name='Harley';
console.log(name);
}
{
let name='Chang';
console.log(name)
}
[Running] node "e:\BlogPlan\ES6\tempCodeRunnerFile.js"
Harley
Chang
[Done] exited with code=0 in 0.086 seconds
四、const声明
ES6提供了const声明,用来声明常量。const声明有几个特点:
- const声明的变量必须在初始化时进行赋值
- const声明的变量,对象本身绑定的值无法修改,但是对象的属性可以进行修改
- 与let声明类似,无法在同一块级作用域内,声明重复的变量名
代码清单如下:
1、const声明的变量必须在初始化时进行赋值
{
const name={
firstName:'Harley',
lastName:'Chang'
};
const age;
age=30;
}
e:\BlogPlan\ES6\tempCodeRunnerFile.js:6
const age;
^^^
SyntaxError: Missing initializer in const declaration
2、const声明的变量,对象本身绑定的值无法修改,但是对象的属性可以进行修改
{
const name={
firstName:'Harley',
lastName:'Chang'
};
console.log(JSON.stringify(name));
name.firstName='Harley007'
console.log(JSON.stringify(name));
}
{"firstName":"Harley","lastName":"Chang"}
{"firstName":"Harley007","lastName":"Chang"}
[Done] exited with code=0 in 0.088 seconds
3、与let声明类似,无法在同一块级作用域内,声明重复的变量名
{
var name = 'Harley-Chang';
const name = 'Harley-Chang';
}
var name = 'Harley-Chang';
^
SyntaxError: Identifier 'name' has already been declared
{
let name = 'Harley-Chang';
const name = 'Harley-Chang';
}
const name = 'Harley-Chang';
^
SyntaxError: Identifier 'name' has already been declared
PS:使用的工具以及插件
编辑器:VS Code
js插件:Code Runner
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律