动态作用域和词法域的区别是什么

区别是:动态作用域是关联在程序执行期间的,对于函数来说就是函数执行的位置决定这个函数所属的范围。词法作用域是关联在编译期间的,对于函数来说就是函数的定义文本段的位置决定这个函数所属的范围。

动态作用域和词法域的区别是什么-Worktile社区

动态作用域

动态作用域是关联在程序执行期间的,对于函数来说就是函数执行的位置决定这个函数所属的范围。

javascript使用的是词法作用域,它最重要的特征是它的定义过程发生在代码的书写阶段

那为什么要介绍动态作用域呢?实际上动态作用域是javascript另一个重要机制this的表亲。作用域混乱多数是因为词法作用域和this机制相混淆,傻傻分不清楚

动态作用域并不关心函数和作用域是如何声明以及在任何处声明的,只关心它们从何处调用。换句话说,作用域链是基于调用栈的,而不是代码中的作用域嵌套。

动态作用域就是整个程序运行的时候只有一个env。

什么是env呢?env就是一组binding。binding是什么呢?binding就是从identifer到value的映射。dynamic scope在每次函数求值的时候都会在这少数的一个env里查询或更新。而static scope是每次函数求值的时候都创建一个新的env,包含了函数定义时候的所能访问到的各种binding。这个新的env连同那个函数一起,俗称闭包Closure。

词法作用域

词法作用域是关联在编译期间的,对于函数来说就是函数的定义文本段的位置决定这个函数所属的范围。

词法作用域就是定义在词法阶段的作用域,是由写代码时将变量和块作用域写在哪里来决定的,因此当词法分析器处理代码时会保持作用域不变。词法作用域,也叫静态作用域,它的作用域是指在词法分析阶段就确定了,不会改变。动态作用域是在运行时根据程序的流程信息来动态确定的,而不是在写代码时进行静态确定的。

词法作用域是在写代码或者定义时确定的,而动态作用域是在运行时确定的(this也是!)。词法作用域关注函数在何处声明,而动态作用域关注函数从何处调用。

延伸阅读:

什么是作用域?

作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。

对于对象而言(其他也是一样的),在main函数中,对象的作用域为他所在的最近的一对花括号内。在后花括号处析构函数被调用;全局的对象的作用域为声明之后的整个文件,析构函数在最后被调用。另外,临时产生的对象在使用完后立即会被析构。

文章标题:动态作用域和词法域的区别是什么,发布者:小编,转载请注明出处:https://worktile.com/kb/p/38526

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月16日 下午11:13
下一篇 2023年2月16日 下午11:15

相关推荐

  • 前端devops什么意思

    前端DevOps:技术融合的未来 在数字化浪潮中,前端开发者寻求效率与质量的双重提升的答案逐渐聚焦于一种新型实践,即前端DevOps。该实践以1、流程自动化、2、持续集成/持续部署(CI/CD)、3、性能优化三大核心点作为推进动力。尤其是流程自动化,它通过减少手动编码错误,加快开发流程,实现软件开发…

    2024年3月26日
    2000
  • Java中的面向对象编程特性是什么

    面向对象编程(OOP)在Java中呈现为四大核心特征:封装、继承、多态和抽象。封装隐藏了类内部的工作原理,继承允许新建的类复用和扩展现有类的功能,多态使得父类引用能够指向子类对象,抽象则是指隐藏具体实现,只展示功能的过程。 特别是封装,它有效地隔离了对象内部状态和行为的具体实现细节,确保模块间的独立…

    2024年1月8日
    18800
  • 如何在云原生环境中确保数据一致性

    在云原生环境中确保数据一致性是关键目标之一,主体答案包括以分布式系统原则为设计基础,利用事务管理机制,和采用可靠的数据存储策略。核心观点围绕几个方面展开:1、采用分布式事务协调机制;2、实现数据持久性和容错能力;3、施行强一致性模型或在可接受范围内使用最终一致性模型;4、利用服务网格架构来管理数据流…

    2023年11月23日
    21600
  • oa云会议

    云会议的优势在于实现地域无界限沟通、提升工作效率、节省企业成本、确保数据安全、提供即时的技术支持。在详细描述方面,节省企业成本尤其值得关注。企业运用云会议可减少对物理会议空间的需求,降低差旅和住宿的开销,同时云服务通常按需付费,进一步减轻了企业的经济负担。 一、云会议的概念与运作机制 云会议,即基于…

    2024年1月11日
    27500
  • 云原生和传统架构有什么区别

    云原生架构的关键在于其在云环境中设计、构建和运行应用的方式,而传统架构通常是本地化或者专用硬件环境中的应用部署。1、云原生架构更侧重于微服务、容器化、动态管理和自动化。2、传统架构则倾向于单体应用、静态配置和手动运维。3、云原生在弹性、敏捷性和资源利用方面具有优势。 尤其第1点,微服务的利用极大改变…

    2023年12月28日
    24900
  • app store的意思是什么

    app store的意思是application store,是苹果公司为其iPhone、iPod Touch等产品创建和维护的数字化移动应用程序发行平台,用户可以在AppStore上下载各种免费或收费的软件、游戏。同时,它也是第三方开发者的软件销售平台。 一、app store简介 App Sto…

    2023年3月16日
    99200
  • 小型与大型研发项目管理的不同

    在研发项目管理领域,项目规模对管理策略和流程产生显著影响。本文章旨在梳理小型与大型研发项目管理在操作方法和挑战上的区别,重点包括:1、组织结构的灵活性;2、决策速度与过程;3、资源分配策略;4、风险管理的复杂性;5、沟通和协调机制。小型项目通常重视灵活性和快速响应,而大型项目则注重严格的流程和结构化…

    2023年11月14日
    25300
  • 什么是devops产品

    DEVOPS产品适用工具与流程:DevOps,作为系统开发(Dev)与系统运绡(Ops)的缩写,代表一种旨在提高软件交付速度、提升产品质量且增强团队间协作的哲学。本文将深入探讨DevOps的核心要素、主流工具和实施方法。关键在于自动化流程与文化建设方面的应用将被重点展开。 I、DEVOPS的核心理念…

    2024年3月26日
    1800
  • MATLAB有什么突出优势和劣势

    MATLAB的优势:1、工具完善;2、方便;3、支持扩展;4、并行实现简单;5、编程效率高;6、预定义功能。MATLAB的劣势:1、工具箱太多,惯的编程水平降低;2、安装包大;3、循环运算效率低;4、成本太贵。 优势: 1、工具完善 科学计算方面工具无比完善,所有的的变量都是矩阵对象,采用矩阵运算而…

    2023年2月22日
    2.0K00
  • 如何管理DevOps项目的风险

    应对DevOps项目风险涉及采取一系列先进的策略和实践。1、提前识别风险 促使项目团队预测并防范可能的挑战。2、持续集成和持续部署 可以缩短反馈循环,确保快速响应。3、自动化测试 为质量保证提供了坚实的基础。4、性能监控 则及时揭示系统缺陷,而5、合理的回滚策略 保障在出现问题时能够迅速恢复到安全状…

    2023年12月13日
    24600

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部