作用域和闭包(四) 提升

闭包与作用域:深入解析两者间的微妙差异 理解闭包与作用域之间的区别以及它们之间的互动关系,有助于我们更深入地掌握JavaScript的编程精髓,编写出更加高效、可维护的代码。作用域决定了变量和函数的可见性,而闭包则是一种特殊的函数,能够记住并访问其外部作用域中的变量。闭包的形成依赖于JavaScript的词法作用域规则,即函数的作用域在函数定义时就已经确定,而不是在函数执行时。在函数内部声明的变量具有局部作用域,而在函数外部声明的变量则具有全局作用域。作用域规则决定了变量和函数的可见性,而闭包则利用这些规则来实现对外部作用域变量的访问。 阅读详情

当你看到var a=2 时,

JavaScript将其看作两个声明,

var a; 定义声明在编译阶段进行

a=2 ; 赋值声明会被留在原地等待执行阶段

 

只有声明本身会被提升,而赋值或其他运行逻辑会被留在原地。如果提升改变了代码执行的顺序,会造成非常严重的破坏。

 

函数声明和变量声明都会被提升。但是 函数会先被提升,然后才是变量。

 

微妙的差异,赋值并没有被提升。

声明 foo 变量 并初始化 foo = undefined

foo 的赋值在 foo() 执行后 相当于 undefined()

 () 必须是要 函数, undefined不是函数 所以报上面的错

 

反正提升这一块 ,盯着声明看就行,别的都不会被提升上去,

然后函数声明最优先,

随着版本更替,有些写法也会被禁用。

所以,

不要在同一个作用域里进行重复定义

所有的声明(变量和函数)对会被“移动”到各自作用域的最顶端,这个过程被称为提升

声明本身会被提升,而包括函数表达式的赋值在内的赋值操作并不会提升

要注意避免重复声明,特别是当普通的var声明和函数声明混在一起的时候,否则会引起很多危险的问题!

 

告别Mac自带终端:iTerm2 + Oh My Zsh 保姆级配置指南(含国内镜像源) 本文提供了一份详细的Mac终端优化指南,涵盖iTerm2、Oh My Zsh和Homebrew的配置流程,特别针对国内用户提供镜像源解决方案。通过安装现代化工具链和优化配置,帮助开发者打造高效、美观的终端工作环境,提升日常开发效率。 阅读详情

相关推荐

电力抄表协议DL/T645和698.45到底有啥区别?一张图帮你选对协议

本文深入对比了电力抄表协议DL/T645和DL/T698.45的技术差异,从协议架构、报文结构、功能覆盖到实施成本进行全面分析。通过实际案例和数据,揭示698.45协议在通信效率、业务扩展性和长期成本上的优势,并提供清晰的选型决策流程图,帮助工程师根据具体需求选择最适合的电力抄表协议。

weixin_38168696的博客 401

提升 & 作用域闭包

提升 & 作用域闭包提升作用域闭包 提升 问:先有????(赋值)还是先有????(声明)? 答:先有蛋。只有声明本身会被提升,而赋值或其他运行逻辑会留在原地。 函数声明和变量声明都会被提升,但是函数会首先被提升,然后才是变量 foo(); // 1 var foo; // 变量声明 function foo() { // 函数声明 console.log( 1 ); } foo = funct...

weixin_39412098的博客 220

番茄(西红柿)叶片病害检测数据集:12k+图像,10类,yolo标注

本文介绍了包含12,250张图像的番茄叶片病害检测数据集,涵盖10种常见病害类型及健康叶片,采用YOLO格式标注。数据集具有三大核心价值:科研层面填补病害样本空白,推动算法创新;产业应用支持精准诊断、早期预警,降低损失20-40%;社会生态方面减少农药使用15-30%,助力绿色农业。该数据集作为AI与农业结合的数字基础设施,适用于计算机视觉项目、科研实验等场景。

m0_73878864的博客 1135

总结函数声明提升,闭包,作用域,this

JS作用域链var n = 120; function a() { var n = 100; console.log(n); } a();//100 function b() { console.log(n); } b();//120 function c() { n = 100; console.log(n); }//100,注意:不加var是一个全局变量 /*function a(...

wustlucy的博客 328

新四化浪潮下,中年整车诊断工程师的黄金突围路

摘要 本文探讨了汽车电子诊断工程师在当前行业变革中的独特优势与发展路径。作者作为从业者指出,整车诊断岗位在汽车"新四化"浪潮中呈现"逆生长"特性:技术壁垒高、经验复利强、市场需求持续增长。中年工程师凭借丰富的案例积累和实战经验成为行业稀缺人才,薪资水平显著高于同龄段其他技术岗位。文章分析了四条职业发展路径(技术专家、技术管理、细分深耕、横向拓展),并警示了三大职业风险(执行层局限、技术停滞、成果沉淀不足)。最后提出具体建议,强调掌握UDS高阶、DoIP以太网诊断等核心技术的重要性,为中年技术人提供了清晰的职

Soly_kun的博客 309

SIMetrix教程-001.SIMetrix软件简介与安装

  由于某些原因需要用到SIMetrix仿真软件,然而网上的资料并不是特别多,故在此记录一下这款仿真软件的学习过程,也给有需要的人提供一些参考,免走弯路。如果使用过Pspice或者LTspice软件,学习SIMetrix会很容易入门,仿真软件都是大同小异的,会一样后都可以快速入门其他软件。   SIMetrix是一款以SPICE模型为基础的仿真软件,集成了SIMetrix和SIMPLIS两款内核,为工程师提供了可靠的、易于使用的、并完美结合了速度与精度的电路仿真方式。官方的话不多说,和LTspice一样,优

gaoyong_wang的博客 2万+

作用域和闭包(一)

1.1 编译原理 在传统编程语言的流程中,程序中的一段源代码在执行前会经历三个步骤,统称为“编译”。 分词/词法分析(Tokenizing/Lexing) 解析/语法分析(Parsing) 代码生成 1.2 理解作用域 LHS:试图找到变量的容器本身(变量出现在赋值操作左侧),查找的目的是对变量进行赋值 RHS:简单地查找某个变量的值(右侧),目的是获取变量的值 1.3 作用域...

Add_a_cat的博客 246

SAP 系统里生成 PDF 的几条主干路径:从 Spool 转换到 Adobe 原生渲染,再到 BTP 云服务

本文系统梳理了SAP生态中PDF生成的多种技术方案,包括Spool转换、OTF转换、Smart Forms/Adobe Forms原生生成以及云端服务等不同路径。文章通过实际案例和代码示例,详细分析了各方案的适用场景、技术要点和工程实践建议,特别强调了多语言支持、字体处理、性能优化等关键因素。针对不同业务需求,提供了从简单导出到复杂交互式PDF的完整解决方案框架,为SAP环境下的PDF处理提供了实用指南。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 285

[学习笔记]js动画实现方法,作用域,闭包

一,js动画基本都是依靠setInterval和setTimeout来实现 1,setInterval是间隔执行,过一段时间执行一次代码 setInterval(function(){},500);即每隔500毫秒执行一次function(),不主动停止,会一直做下去。 2,setTimeout是延时执行,隔一段时间以后执行 setTimeout(functi...

weixin_30613727的博客 206

IEC 61850标准协议解读 3.MMS服务

摘要:本文系统介绍了MMS(制造报文规范)的基础知识及其在IEC61850中的应用。首先解析MMS的核心定义、通信流程(带确认/不带确认服务)、虚拟制造设备(VMD)概念及核心对象(域/有名变量等)。重点阐述IEC61850与MMS的映射关系,包括对象分层映射、服务转换规则及数据类型对应。深入分析ASN.1编解码机制,说明MMS PDU的分层结构与解码流程。最后通过典型报文案例(报告服务、控制服务、文件传输等)和通信初始化流程,展示MMS在智能变电站中的实际应用。全文揭示了MMS作为抽象应用层协议如何通过标

张二狗的博客 724

Unity的粒子系统使用shadergraph(内置管线)制作的一个顶点偏移shader,但是粒子模型移动时,顶点也会偏移?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1174

智能小车系统设计:STM32与双视觉模块的工程实践与抗干扰策略

在嵌入式系统与机器人开发领域,微控制器(MCU)和计算机视觉是两大核心技术支柱。MCU作为系统的控制核心,负责实时处理传感器数据、执行精确的运动控制与任务调度,其选型需在性能、实时性与生态成熟度间取得平衡。计算机视觉则赋予机器感知环境的能力,通过图像处理与目标识别实现导航与交互。将两者结合,其技术价值在于构建出能够适应复杂、动态真实环境的自主智能系统,这在自动导引车(AGV)、服务机器人等应用场景中至关重要。本文以一项具体的竞赛项目为例,深入探讨了如何通过**系统架构设计**与**传感器融合**策略,特别是

weixin_30411239的博客 395

C和C++Everything教程的简介

C和C++Everything教程的简介 C和C++Everything教程,该专栏目前已有8000博文,订阅该专栏相当于同时订阅以下所有收费专栏

希望我的博客,能帮上你解决学习中工作中所遇到的问题 4389

一次搞懂作用域和闭包

对于那些有一点 JavaScript 使用经验但从未真正理解闭包概念的人来说,理解闭包可以看作是某种意义上的重生,但需要付出非常多的努力和牺牲才能理解这个概念。

fehub 2109

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

JavaScript作用域与闭包

就已确定。

2301_82023822的博客 1661

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

详解JS的作用域和闭包

作用域和闭包 尽管通常将JavaScript归类为“动态”或“解释执行”语言,但实际上它是一门编程语言。但与传统的编译语言不同,它不是提前编译的,编译结果也不能在分布式系统中进行移植。尽管如此,JavaScript引擎进行编译的步骤和传统的编译语言非常相似,在某些环节可能比预想的复杂。 传统的编译语言通常会在一段源代码执行之前经历三个步骤,统称为“编译”。这三个步骤分别是分词/词法分析(Tokenizing/Lexing)、解析/语法分析(Parsing)、代码生成。但对于JavaScript来说,大部分情

黄黄黄一边敲代码一边写出来的博客 3875

JavaScript复习,this指向、原型链、变量提升、作用域、闭包

文章目录 函数中this指向问题 原型 变量/函数 提升 全局执行上下文: 测试题 var可重复声明 作用域 闭包 更深入理解闭包的原理 闭包的作用 终极题目 ES5的继承

ronghwa_lu 3782

JavaScript作用域、闭包、变量提升

了解作用域对程序执行的影响及作用域链的查找机制,使用闭包函数创建隔离作用域避免全局变量污染。作用域(scope)规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问,作用域分为全局作用域和局部作用域。局部作用域分为函数作用域和块作用域。在函数内部声明的变量只能在函数内部被访问,外部无法直接访问。 总结:在 JavaScript 中使用包裹的代码称为代码块,代码块内部声明的变量外部将有可能无法被访问。 JavaScript 中除了变量外还有常量,常量与变量本质的区别是常量必须要有值且不允许被重新

白女士的博客 876

经典面试题【作用域、闭包、变量提升】,带你深入理解掌握!

今天给大家分享经典面试题【作用域、闭包、作用域链、变量提升】,并提供具体代码帮助大家深入理解,彻底掌握

共同学习,共同成长 1632

深入理解 JavaScript 的作用域与闭包

在 JavaScript 中,作用域和闭包是两个非常重要的概念。它们不仅影响代码的结构和行为,还对我们在编写高效、可维护的 JavaScript 代码时至关重要。理解这两个概念,将帮助你更好地掌握 JavaScript 的工作原理。这篇文章将深入浅出地解释 JavaScript 中的作用域和闭包,帮助你理解这些概念的意义、应用场景以及如何避免常见的坑。作用域是指程序中变量和函数可访问的范围。简单来说,就是在某个特定的上下文中,哪些变量和函数是可用的。作用域决定了变量的生命周期及其能否被访问。在 JavaSc

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 1149

JavaScript执行机制:变量提升、作用域链、词法作用域、块级作用域、闭包和this

本文详细介绍了JavaScript中的关键概念,包括作用域链、词法作用域、块级作用域、闭包和this。文章通过实例阐述了这些概念在JavaScript代码中的应用,以及它们在保证变量正确访问、提高代码可读性和可维护性方面的重要性。深入了解这些核心概念有助于编写高效、可维护的JavaScript代码,并充分利用JavaScript的强大表达能力。

陆业聪 1479

五分钟快速清晰理解作用域和闭包以及封装

JavaScript是一门灵活且强大的编程语言,但其作用域和闭包的概念常常让初学者感到困惑。理解这些概念对于编写高效、可维护的代码至关重要。我们将深入探讨JavaScript中的作用域和闭包,帮助你快速掌握它们的核心原理和实际应用。

qq_45067263的博客 1932

作用域和闭包

js作用域和闭包详解

qq_45812595的博客 911

JS(作用域与闭包)

JS(作用域与闭包)1.对变量提升的理解1.变量定义(上下文)2.函数声明2.说明 this 几种不同的使用场景常见用法1.作为构造函数执行2.作为对象属性执行3.作为普通函数执行(this === window)4.call apply bind3.创建10个 <a>标签,点击的时候弹出来对应的序号结果:均显示 这种的结果是:每次点击时 i 都为10;点击 click 时,弹出 i,...

姜皓的博客 8165

【前端】JavaScript 的神奇世界:作用域、闭包和变量提升的深入探索

JavaScript 是一种动态、灵活且功能强大的编程语言,被广泛用于现代 Web 开发 中。然而,JavaScript 的 作用域、闭包 和 变量提升 等特性常常让初学者甚至有经验的开发人员感到困惑。在这篇文章中,我们将深入探讨这些复杂而有趣的概念,通过分析几个经典的代码示例,揭示 JavaScript 背后隐藏的执行逻辑和原理。例如,变量提升 在代码执行中的优先级问题,闭包 在函数中对外部变量的捕获行为,都会在文中一一讲解。本篇内容 2024.12.2-✍120min

禅宗里有一个词叫做“因缘和合”。 所谓因缘,是指事件要发生所必须的条件。因缘和合就是当你聚集了这件事的一切条件,它就会自然而然的发生。“它就会自然而然的发生”,这种朴素而坚定的价值观让我们感到无比安心,安心到可以不用有任何担心焦虑。 1194

作用域、变量提升和闭包

一、 说明 先浏览题目,判断自己对作用域、变量提升和闭包的掌握情况。然后了解概念和原理,再对照问题检查掌握情况。 二、 题目 下面代码输出的结果?(函数作用域) var name = 'window'; console.log(name); function outer() { var name = 'outer'; console.log(name); function inner() { console.log(name); } inn

doomliu的博客 285
上一篇: 作用域和闭包(三) 函数作用域和块作用域
下一篇: 作用域和闭包(五) 闭包
Add_a_cat
博客等级 码龄10年 5粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值