作用域

静态变量、全局变量和局部变量

家住魔仙堡 提交于 2020-03-28 06:44:07
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 堆和栈的区别: 一、预备知识——程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分: 1、栈区(stack)——由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—— 一般由程序员分配(如new、malloc)和释放(delete,free), 若程序员不释放,程序结束时可能由OS回收,但这样会导致内存泄露,严重的导致系统崩溃, 如一个程序是长期运行的,申请的变量永远都得不到释放,系统内存会耗尽。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)——全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放。 4、文字常量区 —— 常量字符串就是放在这里的。 程序结束后由系统释放 。 5、程序代码区 —— 存放函数体的二进制代码。 堆区就就是就是存放new出来的变量的 1.从作用域看: C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 1、全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然

Powershell-获取DHCP地址租用信息

淺唱寂寞╮ 提交于 2020-03-27 23:17:35
需求:业务需要获取现阶段DHCP服务器所有地址租用信息。 1.首先查看DHCP相关帮助信息: 2.确定执行命令并获取相关帮助信息:help Get-DhcpServerv4Scope 名称 Get-DhcpServerv4Scope 语法 Get-DhcpServerv4Scope [[-ScopeId] <ipaddress[]>] [-ComputerName <string>] [-CimSession <CimSession[]>] [-ThrottleLimit <int>] [-AsJob] [<CommonParameters>] 3.查看某一作用域下的地址租约信息: Get-DhcpServerv4Lease -ComputerName 10.10.32.26 -ScopeId 10.10.33.0 4.查询所有作用域下的租约信息: Get-DhcpServerv4Scope | Get-DhcpServerv4Lease 5.将查询到的信息导出到CSV文件: 6.按照需求筛选所需字段,为防止到处字符错误(可指定字符),并导出CSV文件: Get-DhcpServerv4Scope |Get-DhcpServerv4Lease |Select-Object IPAddress,AddressState,ClientId,HostName

JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别

前提是你 提交于 2020-03-27 22:18:53
JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别   ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用这些功能。虽然这种假设可能是正确的,但仍有可能其中一些功能对某些人来说仍然是一个谜。   ES6带来的一个新特性是 新增了通过使用let、const来声明变量 。在本文中,我们将讨论var,let和const的范围,使用和提升。在您阅读时,请注意它们之间的差异,我会指出。 VAR VAR的范围   范围本质是意味着这些变量可供使用的位置。 var声明的范围是全局作用于或者本地函数作用域 。当一个var变量声明在函数外面时它的作用域是全局的,这意味着在整个窗口中可以使用在函数块外部使用var声明的任何变量。 var变量在函数内声明时是函数作用域 。这意味着它可用,只能在该函数中访问。   我们举一个例子: <script> var greeter = "Hello"; function hello() { var hi = "Hi"; } </script>   在这里,greeter是全局范围的,因为它存在于函数外部,而hello是函数作用域。所以我们不能在函数外部访问变量hi。所以,如果我们这样做:    var变量可以重新声明和更新   这个是比较好理解的    var变量提升

函数拓展

孤人 提交于 2020-03-27 10:54:15
3 月,跳不动了?>>> 函数拓展 使用默认参数技术,初始化参数的时候,会形成一个作用域 let a = 1; function demo(a,b=a){ console.log(a,b) } demo()// undefined demo(2)// 2 2 let a = 1; function demo(a,b=function(){a =10}()){ console.log(a,b) } demo();// 10 undefined demo(2)// 10 undefined let a = 1; function demo(a,b=function(){a =10}()){ var a = 20; console.log(a,b) } demo();// 20 undefined demo(2)// 20 undefined let a = 1; function demo(a,b=function(){a =10}()){ console.log(a,b) var a = 20; } demo();// 10 undefined demo(2)// 10 undefined 参数默认值与解构语法,均不支持局部严格模式 // 参数默认值局部严格模式 function demo(a=1){ "use strict" console.log(this) } demo()//

javascript 基础知识汇总

不问归期 提交于 2020-03-27 09:54:14
1、 在ES5中, 变量声明有两种方式,分别是var和function, var用于声明普通的变量,接收任意类型,function用于声明函数。另外ES6新增了let、const、import和class等声明方式,let用于声明普通变量(与var的区别在于拥有块级作用域,在作用域内不能重复声明),const用于声明静态变量,import用于声明模块,class用于声明类。 2、JS数据类型共有7种,分别是(1)数值Number、(2)字符串String、(3)布尔Boolean、(4)符号Symbol、(5)Null、(6)Undefined、(7)对象Object。其中Object是引用类型,其他都是原始类型,原始类型也成为基本类型或者是简单类型,因为其占用空间固定,是最简单的数据段,为了便于提升变量查询速度,将其存储在栈中(按值访问)。引用类型由于其值的大小会改变,所以不能将其存放在栈中,否则会降低变量的查询速度,因此其存储在堆中,存储在变量处的值是一个指针,指向存储对象的内存处(按址访问),对于引用类型的值,可以为其添加属性和方法,也可以改变和删除其属性和方法,但基本类型不可以添加属性和方法 3、javasrcipt可以通过typeof来判断原始数据类型,但不能判断引用类型,要知道引用类型的具体类型,可以通过Object原型上的toString来判断。 4

关于spring MVC的面试题

混江龙づ霸主 提交于 2020-03-27 07:30:26
MVC设计模式 M model 模型 model包括service处理业务逻辑,entity实体类封装数据,dao操作数据库,utils工具类 service层主要用来处理业务逻辑,service层的一些公共处理可以使用spring框架的AOP来完成,比如,日志信息,事物的处理 Spring是一个框架,结合了java中多种优秀设计模式形成的一个企业级解决方案 IOC :控制反转,将对象的创建与属性的赋值交给Spring框架完成,将控制权由程序员交给Spring框架这就是控制反转,IOC主要运用的是Java中的工厂设计模式,将要创建对象的类交给Spring工厂,需要时直接去工厂中取 DI: DI和IOC本质相同说法不同,DI依赖注入,通过属性的set方法或者类的构造方法为属性赋值 AOP:面向切面编程,是对OOP面向对象编程的一种补充,主要运用的是Java中代理设计模式,代理设计模式又分为静态代理和动态代理 静态代理和动态代理的区别:静态代理在代码编译时代理类就产生了,动态代理是在代码运行期才会产生代理类,在运行期JDK底层会动态的生成代理类,并创建代理对象 Spring的事务处理: 事务处理由Spring框架的声明式事务处理完成 Spring框架创建对象的创建次数 : Bean标签的scope属性可以设置对象的创建次数,为singleton时这个对象时单例的只会创建一次

js中的函数和循环

白昼怎懂夜的黑 提交于 2020-03-27 03:42:32
一. <1.什么是函数? : 一段定义好的代码,并可以被反复使用的代码块 <2.函数的作用: 提升代码的可复用性 将一段代码进行预定义 ,需要使用的时候才触发 代码块:形成了一个相对独立的作用域 <3.语法: function 函数名(参数列表){ 代码块(函数体) ==>待执行的代码块 return 返回值 返回执行的一些结果, 结束函数(程序碰到return之后,return后面的代码就不会执行了) 最多只能有一个返回值 1.函数的作用域 全局函数:一般是js写好的一些函数, 独立于任何function的位置处,位于JS的最外层 局部函数:在一个函数内部定义的函数 2.变量的作用域 什么是作用域? :范围 变量的生命周期 JS中作用域的分类: <1.函数作用域 该变量只在当前作用域中可以访问 只有在当前函数中能访问,离开函数无法访问 在函数体中使用var关键字定义的变量才是局部变量 <2.全局作用域 一经定义 ,在代码中的任何位置都能访问到 在函数体中不通过var关键字定义且赋值了的变量 ,就会成为全局变量 3.分支结构 程序 = 数据结构 + 算法 任何复杂的算法都有以下几种结构: <1、顺序结构 <2、分支选择结构 <3、循环结构 4.分支结构:满足不同的条件执行不同的程序 if分支:当条件满足时,运行某些语句 语句可能会执行 if...else...分支:当条件满足时

javascript中的this作用域详解

▼魔方 西西 提交于 2020-03-27 00:49:08
javascript中的this作用域详解 Javascript中this的指向一直是困扰我很久的问题,在使用中出错的机率也非常大。在面向对象语言中,它代表了当前对象的一个引用,而在js中却经常让我觉得混乱,它不是固定不变的,而是随着它的执行环境的改变而改变。 在Javascript中this总是指向调用它所在方法的对象。因为this是在函数运行时,自动生成的一个内部对象,只能在函数内部使用。 下面我们分几种情况深入分析this的用法: 1.全局的函数调用 function globalTest() { this.name = "global this"; console.log(this.name); } globalTest(); //global this 以上代码中,globalTest()是全局性的方法,属于全局性调用,因此this就代表全局对象window。为了充分证明this是window,对代码做如下更改: var name = "global this"; function globalTest() { console.log(this.name); } globalTest(); //global this name作为一个全局变量,运行结果仍然是“global this”,说明this指向的是window。在方法体中我们尝试更改全局name,再次调用方法输出

9.包&&命名空间

末鹿安然 提交于 2020-03-25 19:31:45
3 月,跳不动了?>>> 9.包&&命名空间 名字空间和作用域 定义 名称空间(Namespace)是名字和对象的映射 A namespace is a mapping from names to objects 名称空间是一个字典,其中键是名字,值是对象 内建、模块、函数、类都有自己的名称空间 Python的built-in names(包括内置函数,内置常量,内置类型) 模块的全局名称global names(这个模块定义的函数,类,变量) 函数的局部名称local names 名称空间通过__dict___属性和dir( )函数查看 >>> dir(M3) ['C', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'i', 'math', 'printmsin', 'prints', 'printx', 's', 'x'] >>> list(M3.__dict__.keys()) ['prints', '__builtins__', 'printx', '__file__', 'C', '__package__', 'printmsin', 'i', 's', 'x', '__name__', '__doc__', 'math'] 作用域 作用域(Scope)即一个作用范围

ES6学习笔记-let和const命令

隐身守侯 提交于 2020-03-24 21:43:03
3 月,跳不动了?>>> ES6简介 ECMAScript 6.0(简称 ES6)的第一个版本在 2015 年 6 月发布,正式名称就是《ECMAScript 2015 标准》(简称 ES2015),标准在每年的 6 月份都会发布一次,命名规则为:ES+年份,ES6涵盖了ES2015-ES2019的所有标准,因此ES6是一个历史名词,含义是 5.1 版(2011 年,ECMAScript 5.1 版发布)以后的 JavaScript 的下一代标准。 重要案例 此页面案例参考于: ECMAScript 6 入门 ES6 规定let、const语句不出现变量提升,防止在变量声明前就使用这个变量,从而导致意料之外的行为。 var tmp = 123; if (true) { tmp = 'abc'; // ReferenceError let tmp; } 上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。(如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域) ES6的块级作用域 ES5 只有全局作用域和函数作用域,let实际上为 JavaScript 新增了块级作用域。 // IIFE 写法 (function () { var tmp =