浅谈一下ES6的提升

简介: es6的提升在es6之前,我们定义定义变量的时候,只能使用var关键字来定变量,这样有一个问题,var定义的变量会成为全局变量。

es6的提升

在es6之前,我们定义定义变量的时候,只能使用var关键字来定变量,这样有一个问题,var定义的变量会成为全局变量。

但是在我们实际开发的过程中,我们应该尽量少的将变量或者函数暴露在全局作用域下,这是一种好的软件设计原则。

为了解决var的变量泄露问题,es6引入了let和const关键字。

什么是提升

提升就是变量或者函数在定义之前就可以使用,这是因为js引擎在编译的时候,会将变量和函数的声明提升到作用域的顶部。

注意这里我们讲到了函数与变量都存在提升的现象:

变量提升

console.log(a); // undefined
    var a = 1;
复制代码

在这里并不会出现ReferenceError的错误,因为js引擎在编译的时候,会将变量的声明提升到作用域的顶部,所以在这里我们可以使用变量a,但是值为undefined。

也就是说,变量提升只会提升变量的声明,而不会提升变量的赋值。

变量提升,提升的变量的声明,而变量的运行逻辑还是停留在原地。

那么es6新增的let和const关键字,是否也存在变量提升呢?

我认为是会提升的,但是:由于let与const暂时性死区的问题,导致在变量声明之前使用变量会报错。这里看法不统一,有人认为会提升,有人认为不会提升

console.log(a); // ReferenceError: a is not defined
    let a = 1;
复制代码

函数提升

console.log(a); // function a() {}
    function a() {};
复制代码

这里注意:我们上面这段代码里面书写的是函数声明,而不是函数表达式。

这点很重要,因为在函数提升中,只有函数声明才会被提升,函数表达式是不会被提升的。

其实很好理解,这就像变量提升相似,提升的只是函数的声明,而不会提升函数的赋值。

console.log(a); // TypeError
    var a = function() {};
复制代码

其实上面的代码就类似于下面的样子:

var a;
    console.log(a); // TypeError
    a = function() {};
复制代码

函数提升优先

要是函数和变量提升两者同时存在的时候,谁会更先提升呢?

console.log(a); // function a() {}
    var a = 1;
    function a() {};
复制代码

到这里答案就很明显了,函数优先。

总结

不管是函数还是变量,被提升的只有声明,并没有赋值。

注意

  • 函数提升优先
  • 函数只会提升函数声明,不会提升函数表达式


相关文章
|
机器学习/深度学习 Python
概率论常见面试问题总结,含答案
概率论常见面试问题总结,含答案
|
6月前
|
人工智能 自然语言处理 数据可视化
2026年新手一键部署OpenClaw(原Clawdbot)详细步骤流程
OpenClaw(前身为Clawdbot、Moltbot)是一款主流开源AI代理工具,核心优势在于能通过自然语言指令完成自动化任务,可深度适配办公、开发、团队协作等多场景,实现文件处理、日程管理、信息提取等实操功能,依托阿里云服务器部署还能实现7×24小时不间断运行。2026年,阿里云针对OpenClaw推出专属一键部署方案,通过预置专属镜像规避复杂环境配置,彻底简化部署流程,无需手动安装Node.js、Python等依赖,无需编写任何代码,全程可视化操作+复制命令,零基础新手也能在30-40分钟内完成从服务器购买到OpenClaw正常使用的全流程,真正实现“零技术门槛落地专属AI助手”。
749 4
|
8月前
|
前端开发 JavaScript Java
Spring Boot中使用拦截器
Spring Boot拦截器基于AOP,用于拦截动态请求,常用于权限控制、登录验证等场景。通过实现HandlerInterceptor接口定义拦截逻辑,结合WebMvcConfigurer配置路径匹配规则。注意避免静态资源被误拦截,可采用实现WebMvcConfigurer方式或手动放行静态资源。支持灵活扩展,如通过自定义注解实现方法级开关控制,适用于前后端分离或传统项目中的请求过滤需求。
|
8月前
|
运维 关系型数据库 MySQL
💰 RDS MySQL vs 自建数据库:实测对比性能、成本与运维复杂度
一家初创公司迁至RDS MySQL后,月度运维从40小时减至3小时,年成本反降28%。本文通过性能、成本、运维实测对比,揭示云数据库在效率、总拥有成本与自动化管理上的压倒性优势,助力企业专注业务创新。
|
存储 安全 开发工具
CSGHub 开源大模型资产管理平台
CSGHub是一个开源的大模型资产管理平台,支持LLM及其应用的全生命周期管理。用户可通过Web界面、Git命令或Chatbot进行资产的上传、下载、存储、校验和分发。他们刚发不到了阿里云云市场
|
缓存 安全 JavaScript
掌握JAMstack:构建更快、更安全的Web应用
JAMstack 是一种现代 Web 开发架构,结合 JavaScript、APIs 和 Markup,创建更快、更安全的 Web 应用。其核心优势包括高性能、安全性、可扩展性和易维护性。JAMstack 通过预构建静态页面和 API 实现高效渲染,利用静态站点生成器如 Gatsby 和 Next.js,并借助 CDN 和缓存策略提升全球访问速度。尽管面临复杂交互、SEO 和数据更新等挑战,但通过 Serverless Functions、预渲染和实时 API 更新等方案,这些挑战正逐步得到解决。
|
Kubernetes 网络协议 安全
[kubernetes]二进制方式部署单机k8s-v1.30.5
[kubernetes]二进制方式部署单机k8s-v1.30.5
|
人工智能 API 语音技术
[AI MoneyPrinterTurbo] 一键成片,超级印钞机
探索MoneyPrinterTurbo的奇妙旅程,一个文生视频工具,让您只需一键,就能体验从安装到配置,再到创建高清短视频的全过程。
[AI MoneyPrinterTurbo] 一键成片,超级印钞机
|
SQL Java 网络安全
SQL Server 2016 安装
SQL Server 2016 安装
337 0

热门文章

最新文章