二.ES6新的声明方式
前言:
以前我们在声明时只有一种方法,就是使用var来进行声明,ES6对声明的进行了扩展,现在可以有三种声明方式了。
字面理解ES6的三种声明方式:
var
:它是variable的简写,可以理解成变量的意思。let
:它在英文中是“让”的意思,也可以理解为一种声明的意思。const
:它在英文中也是常量的意思,在ES6也是用来声明常量的,常量你可以简单理解为不变的量。
var声明:
var在ES6里是用来升级全局变量的,我们可以先作一个最简单的实例,用var声明一个变量a,然后用console.log进行输出。
1 2 | var a= 'rong' ; console.log(a); //rong |
我们可以看到rong在控制台已经被打印出来了。那如何理解它的作用是声明全局变量那?我们用匿名函数给他进行一个包裹,然后在匿名函数中调用这个a变量,看看能不能调用到。
1 2 3 4 | var a= "rong" ; window.onload= function (){ console.log(a); //rong } |
可以看到控制台输出了rong,这证明var确实是全局的。如果你觉的这个不够直观说明var是全局声明,还可以用区块的方式进行调用测试,先看下面的代码。
1 2 3 4 5 | var a=2; { var a=3; } console.log(a); //3 |
这时打印出来的值是多少那?对,应该是3,因为var是全局声明的。
** let局部声明 **
通过两个简单的例子,我们对var的全局声明有了一定了解。那跟var向对应的是let,它是局部变量声明。还是上面的例子,我们试着在区块里用let声明。
1 2 3 4 5 | var a=2; { let a=3; } console.log(a); //2 |
这时候控制台打印出来的值就是2了。如果我们只在区块里声明,不再外部声明,我们打印a时就会报错,显示找不到变量。
1 2 3 4 | { let a=3; } console.log(a); //a is not defined |
上面两个例子说明了let是局部变量声明,let声明只在区块内起作用,外部是不可以调用的。
** 用Let声明的循环 **
1 2 3 4 | for ( let i=0;i<10;i++){ console.log( '循环体中:' +i); } console.log( '循环体外:' +i); |
你执行时会发现控制台报错了,找不到循环体外的i变量。通过两种声明的比较,可以明白let在防止程序数据污染上还是很有用处的。我们要努力去习惯用let声明,减少var声明去污染全局空间,在vue的使用中也要注意这点。
** const声明常量**
在程序开发中,有些变量是希望声明后在业务层就不再发生变化了,简单来说就是从声明开始,这个变量始终不变,就需要用const进行声明。
我们来一段用const声明错误的代码,在错误中学习const的特性也是非常好的。
1 2 3 | const a= "rong" ; var a= '蓉' ; console.log(a); |
在编译这段代码的过程中,你就会发现已经报错,无法编译了,原因就是我们const声明的变量是不可以改变的。const是很好理解的
-----总结---------------------------------------------------------------------------------------------------------------------------------------------------
1. var 跟 let 上面的变量是可以重复声明并且可以重复定义
2. var 在函数内声明,只能在函数作用域中使用(假设在if语句中声明,var还是属于全局的)
3. let 跟 const 是块级作用域中声明的,{ }
4. const 声明的变量是不能修改的,但是变量的属性是能够重新赋值的,假设连属性也不许给他修改,那会用到es5中的方法
1 2 3 4 | const wangrong = { name: 'wr' , age: '26' }<br>const wangrong = Object.freeze(person); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~