热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

每日一题·作用域链的理解(11/30)

目录1.作用域是什么:2.词法作用域是什么:3.作用域链是什么:4.作用域引擎编译器的互动5.作用域链的概念1.作用域是什么&#x

目录

1. 作用域是什么:

2. 词法作用域是什么:

3. 作用域链是什么:

4. 作用域 引擎 编译器的互动

5. 作用域链的概念




1. 作用域是什么:

变量在内存中如何存储,后续使用时如何查找,有一套管理的机制和规则,这个规则就是作用域。换种说法,作用域控制着变量的可访问性,--> 谁能够访问这个变量


2. 词法作用域是什么:

指的是你的代码写在哪里,词法作用域就在哪里。比如函数的词法作用域就是在声明的位置决定好。


3. 作用域链是什么:

当前的作用域,不仅仅包含当前范围内的变量的访问权,还有对上一级的作用域里面的变量的引用,能够向上访问,但是向下访问是不被允许的。

追问


4. 作用域 引擎 编译器的互动


  • var a = 2;这句代码,编译器会问作用域,当前范围内,是否已经声明了a变量,如果声明了,就忽略var a这个声明,否则就会要求作用域来声明


  • 代码生成阶段时,引擎也会进行变量的查找,问作用域a变量有没有,有的话就拿来直接用,2赋值给它,没有就往上一级去查找。

分词、词法分析、代码生成,上面两步都在代码生成阶段


5. 作用域链的概念


  • 从开发的角度来看,当前范围找不到,就往上面去查找,到底是好还是坏?好处,公共的变量是可以共享的;坏处的话,可能会有“遮蔽效应”,就是最近一级找到了就停止了。但是如果我们想访问上一级别的呢?就不行了

  • 从知识点的联系角度,和闭包有关系,闭包之所以能够产生,作用域链是很重要的概念。闭包能够在外面访问里面,向下访问。而作用域是从里面向外面访问,他们两个合体,天下无敌


推荐阅读
  • 本文详细介绍了如何通过修改Lua源码或使用动态链接库(DLL)的方式实现Lua与C++之间的高级交互,包括如何编译Lua源码、添加自定义API以及在C++中加载和调用Lua脚本。 ... [详细]
  • 本文介绍了ThinkPHP框架的基本概念及其主要特性。作为一款遵循Apache许可证的开源框架,ThinkPHP不仅支持多种平台和Web服务器,还提供了丰富的功能以适应不同的开发需求。 ... [详细]
  • Java性能优化指南 | 制定有效的性能优化策略
    探讨Java应用性能优化的方法与策略,包括性能测试技巧、常见问题及解决方案,旨在帮助开发者提升系统性能。 ... [详细]
  • 寒武纪C++实习面试经验分享
    本文详细介绍了C++中的一些关键知识点,包括继承方式、虚继承、多态性以及引用与指针的使用场景。通过具体实例和代码示例,帮助读者更好地理解和应用这些概念。 ... [详细]
  • 在安装 CUDA Toolkit 时,系统会自动安装 NVIDIA 驱动。然而,这些默认的驱动可能不适合所有用户的硬件配置,因此有时需要手动安装特定版本的 NVIDIA 驱动。本文将详细介绍如何在 Ubuntu 14.04 系统上正确安装 NVIDIA 驱动和 CUDA Toolkit。 ... [详细]
  • 本文详细介绍了如何使用JavaScript实现数据的双向绑定,包括MVVM架构的基本概念、不同框架下的实现方式以及具体的代码示例。 ... [详细]
  • 本文介绍如何在Mac和Windows操作系统中配置Sublime Text以直接运行PHP文件的方法,包括环境变量的设置及Sublime Text构建系统的创建。 ... [详细]
  • C# 6.0 中的 $ 符号:字符串插值新特性
    本文详细介绍了 C# 6.0 引入的字符串插值功能,探讨了其对传统 string.Format 方法的改进,并提供了实际应用示例。 ... [详细]
  • 本文档详细介绍了在 CentOS Linux 7.9 系统环境下,如何从源代码编译安装 libwebsockets 库及其示例程序,并提供了编译过程中可能遇到的问题及解决方案。 ... [详细]
  • Java集合框架源码解读(1)——ArrayList、LinkedList和Vector
    java.util.List接口是JavaCollectionsFramework的一个重要组成部分,List接口的架构图如下:本文将通过剖析List接 ... [详细]
  • 本文详细介绍了 Linux 内核 API 中的 prepare_to_wait 函数,包括其功能、使用方法和具体实现细节。 ... [详细]
  • 本文探讨了在C#服务中捕获控制台输出的有效方法,特别是在远程系统部署的应用场景下。文中不仅提供了基础的解决方案,还深入讨论了最佳实践,如使用日志库和事件日志等。 ... [详细]
  • 代码规范与团队效率提升
    本文探讨了在项目开发中引入代码规范的重要性,尤其是在小型团队或创业公司中。通过具体的案例分析,强调了代码规范不仅能提高代码质量,还能促进团队协作和项目长期发展。 ... [详细]
  • 尽管大多数递归函数能够通过循环和栈结构重写,但在某些特定条件下,这种转换变得极为复杂甚至不可能。本文探讨了这些条件及其背后的原理。 ... [详细]
  • 构建Struts 2 Web应用程序指南
    本文提供了一个详细的步骤指南,帮助开发者从零开始创建一个简单的Struts 2 Web应用程序,涵盖了从环境搭建到项目部署的全过程。 ... [详细]
author-avatar
手机用户2502856985
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有