作用域

C Primer Plus 第12章 12.9 总结

时光怂恿深爱的人放手 提交于 2019-12-01 09:55:56
用于存储程序数据的内存可用 存储时期、作用域和链接 来表征。 存储时期可以是静态的、自动的或者分配的。 如果是静态的,内存在程序开始执行时被分配,并在程序运行时一直存在。如果是自动的,变量所用的内存在程序执行到该 变量定义所在的代码块时开始分配 ,在退出代码块时释放。如果是分配 的内存,内存通过调用malloc()分配,通过调用函数free()释放。 作用域决定了哪一部分程序可以访问某个数据 。在所有函数之外定义的变量具有文件作用域,并对该变量声明之后定义的全部函数可见。在代码块内定义或者作为函数参量定义的变量具有代码块作用域,并只在该代码块及其子代码块中可见。 链接描述了程序的某个单元定义的变量可被链接到其他哪些地方。 具有代码块作用域的变量作为局部变量,具有空链接。具有文件作用域的变量可有内部链接或外部链接。内部链接意味着变量只可在包含变量定义的文件内部使用。外部链接意味着变量也可以在其他文件中使用。 下面是C的一种存储类: C的5种存储类 自动 在一个代码块内(或一个函数头部作为参量)声明的变量,无论有没有存储类修饰符auto,都属于自动存储类。该类具有自动存储时期、代码块作用域和空链接。如未经初始化,它的值是不定的。 寄存器 在一个代码块内(或一个函数头部作为参量)使用存储类修饰符register声明的变量属于寄存器存储类。该 类具有自动存储时期、代码块作用域和空链接

JS作用域

丶灬走出姿态 提交于 2019-12-01 09:33:24
作用域 作用域:变量可以起作用的范围 全局变量和局部变量 全局变量 在任何地方都可以访问到的变量就是全局变量,对应全局作用域 局部变量 只在固定的代码片段内可访问到的变量,最常见的例如函数内部。对应局部作用域(函数作用域) 不使用var声明的变量是全局变量,不推荐使用。 变量退出作用域之后会销毁,全局变量关闭网页或浏览器才会销毁 块级作用域 任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。 在es5之前没有块级作用域的的概念,只有函数作用域 ,现阶段可以认为JavaScript没有块级作用域 作用域链 只有函数可以制造作用域结构, 那么只要是代码,就至少有一个作用域, 即全局作用域。凡是代码中有函数,那么这个函数就构成另一个作用域。如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域。 ​ 将这样的所有的作用域列出来,可以有一个结构: 函数内指向函数外的链式结构。就称作作用域链。 // 案例1: function f1() { function f2() { } } ​ var num = 456; function f3() { function f4() { } } // 案例2 function f1() { var num = 123; function f2() { console.log(num

Rust入坑指南:核心概念

纵然是瞬间 提交于 2019-12-01 09:06:00
如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的。 今天要介绍的是Rust的一个核心概念:Ownership。全文将分为什么是Ownership以及Ownership的传递类型两部分。 什么是Ownership 每种编程语言都有自己的一套内存管理的方法。有些需要显式的分配和回收内存(如C),有些语言则依赖于垃圾回收器来回收不使用的内存(如Java)。而Rust不属于以上任何一种,它有一套自己的内存管理规则,叫做Ownership。 在具体介绍Ownership之前,我想要先声明一点。 Rust入坑指南:常规套路 一文中介绍的数据类型,其数据都是存储在栈中。而像String或一些自定义的复杂数据结构(我们以后会对它们进行详细介绍),其数据则存储在堆内存中。明确了这一点后,我们来看下Ownership的规则有哪些。 Ownership的规则 在Rust中,每一个值都有对应的变量,这个变量称为值的owner 一个值在某一时刻只能有一个owner 当owner超出作用域后,值会被销毁 这三条规则非常重要,记住他们会帮助你更好的理解本文。 变量作用域 Ownership的规则中,有一条是owner超过范围后,值会被销毁。那么owner的范围又是如何定义的呢?在Rust中,花括号通常是变量范围作用域的标志。最常见的在一个函数中,变量s的范围从定义开始生效,直到函数结束

04-JavaScript基础语法

自闭症网瘾萝莉.ら 提交于 2019-12-01 07:53:47
学习目标: 掌握编程的基本思维 掌握编程的基本语法 typora-copy-images-to: media --- JavaScript基础 HTML和CSS 京东 网页、网站和应用程序 网页:单独的一个页面 网站:一些列相关的页面组成到一起 应用程序:可以和用户产生交互,并实现某种功能。 演示JavaScript的强大 http://impress.github.io/impress.js/ http://naotu.baidu.com/ https://codecombat.com/ https://ide.codemao.cn/ 需要翻墙 https://developers.google.com/blockly/ blockly迷宫 https://blockly-games.appspot.com blockly迷宫不需要翻墙 https://blockly.uieee.com/ JavaScript介绍 JavaScript是什么 HTML CSS JavaScript 编程语言 流程控制 Netscape在最初将其脚本语言命名为LiveScript,后来Netscape在与Sun合作之后将其改名为JavaScript。JavaScript最初受Java启发而开始设计的,目的之一就是“看上去像Java”,因此语法上有类似之处,一些名称和命名规范也借自Java

Py3 nonlocal和global的不同

自作多情 提交于 2019-12-01 07:51:40
在Py2中,闭包只能读外部函数的变量,不能改写它。为了解决这个问题,Py3引入了nonlocal,在闭包内用nonlocal声明变量,就可以让解释器在外层函数中查找变量名 2种作用域:全局作用域和局部作用域。全局作用域是指当前代码所在模块的作用域,局部作用域是指当前函数或方法所在的作用域。局部作用域里的代码可以读外部作用域里的变量,不能更改它。如果想更改它,这里就要使用global 实例 关键字nonlocal的作用与关键字global类似,使用nonlocal关键字可以在一个嵌套的函数中修改嵌套作用域中的变量。 name = 'aaaa' def func() global name name = 'aaaa.com' func() print(name) 结果: aaaa.com 实例2 def func(): name = 'bbbb' def foo(): nonlocal name name = 'bbbb.com' foo() print(name) func() 结果: bbbb.com 两者的功能不同。global修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal修饰变量后标识该变量是上一级函数中的局部变量 更多技术资讯可关注:gzitcast 来源: https://www.cnblogs.com/heimaguangzhou/p

函数作用域

≯℡__Kan透↙ 提交于 2019-12-01 07:09:28
#作用域if True: x = 3 #if没有作用域print(x)def f(): a = 3 #a这个变量属于函数 出了这个函数就没用了f()print(a) #嵌套作用域 1x =1 def s(): global x #global 关键字可以修改全局变量 x = x + 3 #局部要修改全局变量需要添加global def sf(): # nonlocal x #nonlocal 关键字可以修改嵌套作用域 x = 5 def sd(): nonlocal x #nonlocal 关键字可以修改嵌套作用域 x = x + 7 print("3:",x) sd() print("2:",x) sf() print("1:",x)s()打印 3: 12 2: 12 1: 4 #嵌套作用域 2def s(): x = 3 def sf(): nonlocal x #nonlocal 关键字可以修改嵌套作用域 x = 5 def sd(): nonlocal x #nonlocal 关键字可以修改嵌套作用域 x = x + 7 print("3:",x) sd() print("2:",x) sf() print("1:",x)s()打印 3: 12 2: 12 1: 12 #嵌套作用域 3def s(): x = 3 def sf(): # nonlocal x

js作用域链

给你一囗甜甜゛ 提交于 2019-12-01 07:03:49
当 JavaScript 引擎第一次遇到你的脚本时,它会创建一个全局的执行上下文并且压入当前执行栈。每当引擎遇到一个函数调用,它会为该函数创建一个新的执行上下文并压入栈的顶部。 我们已经知道每次调用函数都会新建一个执行环境。但是在JavaScript解析器内部,调用执行环境要经历两个阶段: 第一阶段: 创建阶段(Creation Stage) - 当函数被调用,但尚未执行函数体内的代码时: 创建作用域链(Scope Chain) 创建变量、函数和参数 确定this的值 第二阶段: 活动 / 代码执行阶段(Activation / Code Execution Stage) 在 JavaScript 代码执行前,执行上下文将经历创建阶段。在 创建阶段会发生三件事 : this 值的决定,即我们所熟知的 This 绑定。 创建词法环境组件。(1) 环境记录器(存储变量和函数声明的实际位置)和 (2) 一个外部环境的引用(就是作用域)。 创建变量环境组件。 抽象地讲,词法环境在伪代码中看起来像这样: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 GlobalExectionContext = { LexicalEnvironment: { EnvironmentRecord: { Type: "Object" , // 在这里绑定标识符

[转载] Eclipse快捷键大全

為{幸葍}努か 提交于 2019-12-01 05:30:37
Eclipse 快捷键大全 Ctrl+1 快速修复 ( 最经典的快捷键 , 就不用多说了 ) Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行 ( 复制增加 ) Ctrl+Alt+↑ 复制当前行到上一行 ( 复制增加 ) Alt+↓ 当前行和下面一行交互位置 ( 特别实用 , 可以省去先剪切 , 再粘贴了 ) Alt+↑ 当前行和上面一行交互位置 ( 同上 ) Alt+← 前一个编辑的页面 Alt+→ 下一个编辑的页面 ( 当然是针对上面那条来说了 ) Alt+Enter 显示当前选择资源 ( 工程 ,or 文件 or 文件 ) 的属性 Shift+Enter 在当前行的下一行插入空行 ( 这时鼠标可以在当前行的任一位置 , 不一定是最后 ) Shift+Ctrl+Enter 在当前行插入空行 ( 原理同上条 ) Ctrl+Q 定位到最后编辑的地方 Ctrl+L 定位在某行 ( 对于程序超过 100 的人就有福音了 ) Ctrl+M 最大化当前的 Edit 或 View ( 再按则反之 ) Ctrl+/ 注释当前行 , 再按则取消注释 Ctrl+O 快速显示 OutLine Ctrl+T 快速显示当前类的继承结构 Ctrl+W 关闭当前 Editer Ctrl+K 参照选中的 Word 快速定位到下一个 Ctrl+E 快速显示当前 Editer 的下拉列表 (

Java快捷键

こ雲淡風輕ζ 提交于 2019-12-01 04:49:09
Ctrl+1 快速修复(经典快捷键) Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加) Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了) Alt+↑ 当前行和上面一行交互位置(同上) Alt+← 前一个编辑的页面 Alt+→ 下一个编辑的页面(当然是针对上面那条来说了) Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性 Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后) Shift+Ctrl+Enter 在当前行插入空行(原理同上条) Ctrl+Q 定位到最后编辑的地方 Ctrl+L 定位在某行 (对于程序超过100的人就有福音了) Ctrl+M 最大化当前的Edit或View (再按则反之) Ctrl+/ 注释当前行,再按则取消注释 Ctrl+O 快速显示 OutLine Ctrl+T 快速显示当前类的继承结构 Ctrl+W 关闭当前Editer Ctrl+K 参照选中的Word快速定位到下一个 Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示) Ctrl+/(小键盘) 折叠当前类中的所有代码 Ctrl+×(小键盘) 展开当前类中的所有代码 Ctrl+Space

Eclipse快捷键

大兔子大兔子 提交于 2019-12-01 02:18:18
Eclipse 快捷键 10 个最有用的快捷键 一个 Eclipse 骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合。通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升。 1. ctrl+shift+r :打开资源 这可能是所有快捷键组合中最省时间的了。这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或 mask 名中的前几个字母,比如 applic*.xml 。美中不足的是这组快捷键并非在所有视图下都能用。 2. ctrl+o :快速 outline 如果想要查看当前类的方法或某个特定方法,但又不想把代码拉上拉下,也不想使用查找功能的话,就用 ctrl+o 吧。它可以列出当前类中的所有方法及属性,你只需输入你想要查询的方法名,点击 enter 就能够直接跳转至你想去的位置。 3. ctrl+e :快速转换编辑器 这组快捷键将帮助你在打开的编辑器之间浏览。使用 ctrl+page down 或 ctrl+page up 可以浏览前后的选项卡,但是在很多文件打开的状态下, ctrl+e 会更加有效率。 4. ctrl+2 , L :为本地变量赋值 开发过程中,我常常先编写方法,如 Calendar.getInstance() ,然后通过 ctrl+2 快捷键将方法的计算结果赋值于一个本地变量之上。 这样我节省了输入类名