局部变量

深入理解Javascript闭包概念

你说的曾经没有我的故事 提交于 2020-03-06 12:21:12
一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部能够直接读取全局变量。 Js代码    var n=999;   function f1(){     alert(n);   }   f1(); // 999 还有一方面,在函数外部自然无法读取函数内的局部变量。 Js代码    function f1(){     var n=999;   }   alert(n); // error 这里有一个地方须要注意,函数内部声明变量的时候,一定要使用var命令。假设不用的话,你实际上声明了一个全局变量! Js代码    function f1(){     n=999;   }   f1();   alert(n); // 999 -------------------------------------------------------------------------------------------------------- 二、怎样从外部读取局部变量? 出于种种原因,我们有时候须要得到函数内的局部变量。可是,前面已经说过了,正常情况下,这是办不到的,仅仅有通过变通方法才干实现。 那就是在函数的内部,再定义一个函数。 Js代码   

C语言中全局变量与局部变量

冷暖自知 提交于 2020-03-06 08:53:44
C语言中全局变量与局部变量的区别是什么呢?我们怎么定义全局变量与局部变量呢。 一、全局变量 以下定义方法中定义的x就是被定义为了全局变量,全局变量可以被全局内的函数引用。 # include <stdio.h> int x = 123 ; int main ( ) 同时定义了全局变量x=123后任然可以再定义一个局部变量x=456。此时程序不会出错。例: # include <stdio.h> int x = 123 ; int main ( ) { int x = 456 ; printf ( "x=%d" , x ) ; return 0 ; } 运行结果: 二、局部变量 局部变量只能定义在函数内不能定义在函数外。局部变量有以下两种定义方式: # include <stdio.h> int main ( int x ) //定义局部变量x { int y = 1 ; //定义局部变量y并将y赋值为1 x = 2 ; //将x赋值为2 printf ( "x=%d,y=%d" , x , y ) ; //输出x和y的值 return 0 ; } 运行结果: 三、全局变量和局部变量的一些特性的总结 :1.全局变量因为可以被所有函数引用,所有他的生命周期长于局部变量。生命周期变长后占用内存也会更多,因为无法及时的释放。2.当全局变量和局部变量名字相同时取值取局部变量

go slice切片引用类型详解

守給你的承諾、 提交于 2020-03-06 04:43:45
Golang的引用类型包括 slice、map 和 channel 。它们有复杂的内部结构,除了申请内存外,还需要初始化相关属性。 内置函数 new 计算类型大小,为其分配零值内存,返回指针。而 make 会被编译器翻译成具体的创建函数,由其分配内存和初始化成员结构,返回对象而非指针。 package main func main ( ) { a := [ ] int { 0 , 0 , 0 } // 提供初始化表达式。 a [ 1 ] = 10 b := make ( [ ] int , 3 ) // make slice b [ 1 ] = 10 c := new ( [ ] int ) c [ 1 ] = 10 // ./main.go:11:3: invalid operation: c[1] (type *[]int does not support indexing) } 引用类型 变量存储的是一个地址,这个地址存储最终的值。内存通常在堆上分配。通过GC回收。 获取指针类型所指向的值,使用:” * “ 取值符号 。比如:var p int, 使用*p获取p指向的值 ** 指针、slice、map、chan **等都是引用类型。 new和make的区别 make 用来创建map、slice、channel new 用来创建值类型 new 和 make 均是用于分配内存:

成员变量、局部变量、实例变量、静态变量、类变量、常量

一个人想着一个人 提交于 2020-03-06 03:48:06
成员变量: 直接在类中声明的变量叫成员变量(又称全局变量) ▲ 初始化: 如果未对成员变量设置初始值,则系统会根据成员变量的类型自动分配初始值:int分配初始值0、boolean分配初始值false,而自定义类型则分配初始值null ▲作用范围: 成员变量定义后,其作用域是其所在的整个类。且成员变量的定义没有先后顺序,但是最好将成员变量的定义集中在类的顶部。 public class Field { static int v ; //定义int类型数据 static double w ; //定义double类型数据 static char x ; //定义char类型数据 static boolean y ; //定义boolean类型数据 static String z ; //定义String类型数据 public static void main ( String [ ] args ) { System . out . println ( v ) ; //输出0 System . out . println ( w ) ; //输出0.0 System . out . println ( x ) ; //输出空,实质上此时x的值为0 System . out . println ( y ) ; //输出false System . out . println ( z ) ;

python——变量的高级使用

本秂侑毒 提交于 2020-03-05 16:53:35
变量进阶(理解) 目标 变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用 变量 和 数据 都是保存在 内存 中的 在 Python 中 函数 的 参数传递 以及 返回值 都是靠 引用 传递的 1.1 引用的概念 在 Python 中 变量 和 数据 是分开存储的 数据 保存在内存中的一个位置 变量 中保存着数据在内存中的地址 变量 中 记录数据的地址 ,就叫做 引用 使用 id() 函数可以查看变量中保存数据所在的 内存地址 注意:如果变量已经被定义,当给一个变量赋值的时候,本质上是 修改了数据的引用 变量 不再 对之前的数据引用 变量 改为 对新赋值的数据引用 1.2 变量引用 的示例 在 Python 中,变量的名字类似于 便签纸 贴在 数据 上 定义一个整数变量 a ,并且赋值为 1 代码 图示 a = 1 | 将变量 a 赋值为 2 代码 图示 a = 2 | 定义一个整数变量 b ,并且将变量 a 的值赋值给 b 代码 图示 b = a | 变量 b 是第 2 个贴在数字 2 上的标签 1.3 函数的参数和返回值的传递 在 Python 中,函数的 实参 / 返回值 都是是靠 引用 来传递来的 def test(num): print("-" * 50) print("%d 在函数内的内存地址是 %x" % (num, id(num))) result

【诡异并发三大恶人】原子性

余生颓废 提交于 2020-03-05 14:58:13
转:https://mp.weixin.qq.com/s/UiaXvnjc0NFfNMLf2lUq4A 前言、原子性的阐述 一个或者多个操作在 CPU 执行的过程中不被中断的特性称为原子性。 我理解是一个操作不可再分,即为 原子性 。而在并发编程的环境中,原子性的含义就是只要该线程开始执行这一系列操作,要么全部执行,要么全部未执行,不允许存在执行一半的情况。 我们试着从数据库事务和并发编程两个方面来进行对比: 1、在数据库中 原子性概念是这样子的:事务被当做一个不可分割的整体,包含在其中的操作要么全部执行,要么全部不执行。且事务在执行过程中如果发生错误,会被回滚到事务开始前的状态,就像这个事务没有执行一样。(也就是说:事务要么被执行,要么一个都没被执行) 2、在并发编程中 原子性概念是这样子的: 第一种理解:一个线程或进程在执行过程中,没有发生上下文切换。 上下文切换:指 CPU 从一个进程/线程切换到另外一个进程/线程(切换的前提就是获取 CPU 的使用权)。 第二种理解:我们把一个线程中的一个或多个操作(不可分割的整体),在 CPU 执行过程中不被中断的特性,称为原子性。(执行过程中,一旦发生中断,就会发生上下文切换) 从上文中对原子性的描述可以看出,并发编程和数据库两者之间的原子性概念有些相似: 都是强调,一个原子操作不能被打断! ! 而非原子操作用图片表示就是这样子的:

Linux中的线程局部存储(一)

∥☆過路亽.° 提交于 2020-03-05 09:43:37
在 Linux系统中使用C/C++进行多线程编程时,我们遇到最多的就是对同一变量的多线程读写问题,大多情况下遇到这类问题都是通过锁机制来处理,但这对 程序的性能带来了很大的影响,当然对于那些系统原生支持原子操作的数据类型来说,我们可以使用原子操作来处理,这能对程序的性能会得到一定的提高。那么对 于那些系统不支持原子操作的自定义数据类型,在不使用锁的情况下如何做到线程安全呢?本文将从线程局部存储方面,简单讲解处理这一类线程安全问题的方法。 一、数据类型 在C/C++程序中常存在全局变量、函数内定义的静态变量以及局部变量,对于局部变量来说,其不存在线程安全问题,因此不在本文讨论的范围之内。全局变量 和函数内定义的静态变量,是同一进程中各个线程都可以访问的共享变量,因此它们存在多线程读写问题。在一个线程中修改了变量中的内容,其他线程都能感知并 且能读取已更改过的内容,这对数据交换来说是非常快捷的,但是由于多线程的存在,对于同一个变量可能存在两个或两个以上的线程同时修改变量所在的内存内 容,同时又存在多个线程在变量在修改的时去读取该内存值,如果没有使用相应的同步机制来保护该内存的话,那么所读取到的数据将是不可预知的,甚至可能导致 程序崩溃。 如果需要在一个线程内部的各个函数调用都能访问、但其它线程不能访问的变量,这就需要新的机制来实现,我们称之为Static memory local to

python全局变量和局部变量的区别?

六月ゝ 毕业季﹏ 提交于 2020-03-05 07:52:14
python全局变量和局部变量的区别 全局变量和局部变量的区别在于作用域,全局变量在整个py文件中声明,全局范围内可以使用;局部变量是在某个函数内部声明的,只能在函数内部使用,如果超出使用范围(函数外部),则会报错。 推荐: Python教程 #!/usr/bin/python3 # -*- coding: utf-8 -*- A = 100 # 全局变量一般用大写字母表示 def func ( ) : a = 50 # 局部变量一般用小写字母表示 print ( a + A ) func ( ) print ( A ) print ( a ) # 报错信息NameError: name 'a' is not defined #!/usr/bin/python3 # -*- coding: utf-8 -*- A = 100 def func ( ) : A = 250 print ( A ) print ( A ) # 打印全部变量 func ( ) # 局部变量 如果想在函数内部改变全局变量,需要在前面加上global关键字,在执行函数之后,全局变量值也会改变。 #!/usr/bin/python3 # -*- coding: utf-8 -*- A = 100 def func ( ) : global A A = 200 print ( A ) print ( A ) #

final关键字

∥☆過路亽.° 提交于 2020-03-03 11:17:32
1.final关键字概念与四种用法 ====================================================================================================== 2.final关键字用于修饰类 ======================================================================================================== 3.final关键字用于修饰成员方法 ================================================================================================================== 4.final关键字用于修饰局部变量 局部变量:方法大括号中定义的变量 ========================================================================================================================= 5.final关键字用于修饰成员变量 来源: https://www.cnblogs.com/curedfisher/p

js全局访问局部变量

旧城冷巷雨未停 提交于 2020-03-03 09:55:27
1、   在函数内使用this.name(变量名)的方式赋值, 当函数作为普通函数调用时 ,在函数外部可以直接访问到,这是因为这里的this指向window: function fn(){ var r = 2 ; this.ss = 0; this.sum=function(num1,num2){    return (num1+num2)*r; }; } fn(); //var b = new fn(); console.log(ss); //0 console.log(window.sum(1,2)); //6 console.log(sum(1,2)); //6    当函数作为方法函数调用时, 情况又有所不同,这时候this指向发生变化,指向自身: function fn(){ var r = 2 ; this.ss = 0; this.sum=function(num1,num2){    return (num1+num2)*r; }; } var b = new fn(); /* console.log(ss); //error 报错 console.log(window.sum(1,2)); //error 报错 console.log(sum(1,2)); //error 报错 */ //可以通过实例访问 console.log(b.ss); //0