作用域

Java内存划分--数组内存图

我是研究僧i 提交于 2020-03-07 03:28:44
Java内存划分 5 一,栈: 存放的都是方法中的 局部变量,方法的运行一定要在栈当中。 局部变量:方法的参数,方法{}中的变量 作用域:一旦超出作用域,立刻从栈内存中消失。 二,堆: 凡是 new 出来的东西,都在堆当中 堆内存里面的东西都有一个地址值:16进制 堆里面的数据都有默认值: ​ 整数 默认为0 ​ 浮点数 默认为0.0 ​ 字符 默认为 ‘\u0000’ ​ 布尔 默认为false ​ 引用类型 默认为null 三,方法区: 存储 .class 相关信息,包含方法的信息 四,本地方法栈 与操作系统相关 五,寄存器: 与 cpu 相关 一个数组的内存图 方法信息 存储在 方法区中 运行方法就必须将 方法信息 加载到栈中,并在栈中开辟空间,存储数组名 new的时候 是在堆里面,在堆中开辟一段内存空间,编号,赋予16进制地址值。 将地址值赋给栈里面的数组名。 根据索引赋值的时候,通过数组名的地址,在堆中找到相应内存地址,按照索引递增,找到相应地址 两个数组的内存图 类比一个数组,我都懒得写了… 还是要注意压栈的问题 画这个图,实际上是为下面做铺垫 两个引用指向同一个数组 其实图里面已经可以很清楚的看到,虽然 B数组是被 A数组赋值了,但是,B数组依然能够指向内存中new出来的数组地址, 由此,不难看出,通过 数组B 一样能够改变 堆内存中的数组 实际上,是堆内存共享了

JavaScript 函数

浪子不回头ぞ 提交于 2020-03-07 02:23:41
函数 由于JavaScript的函数也是一个对象,所以类似function abs(v){}函数实际上是一个函数对象,而函数名 abs 可以视为指向该函数的变量。 因此,第二种定义函数的方式如下: var abs = function (x) { if (x >= 0) { return x; } else { return -x; } }; 在这种方式下, function (x) { ... } 是一个匿名函数,它没有函数名。但是,这个匿名函数赋值给了变量 abs ,所以,通过变量 abs 就可以调用该函数。 此方式按照完整语法需要在函数体末尾加一个 ; 表示赋值语句结束。 由于JavaScript允许传入任意个参数而不影响调用,因此传入的参数比定义的参数多也没有问题,虽然函数内部并不需要这些参数: abs(10, 'blablabla'); // 返回10 abs(-9, 'haha', 'hehe', null); // 返回9 传入的参数比定义的少也没有问题: abs(); // 返回NaN 此时 abs(x) 函数的参数 x 将收到 undefined ,计算结果为 NaN 。 要避免收到 undefined ,可以对参数进行检查: if (typeof x !== 'number') { throw 'Not a number'; } arguments

深入理解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代码   

Python_day01——变量

喜你入骨 提交于 2020-03-06 04:35:17
变量 1、 声明变量    1 name= " 钱成龙 "   变量定义的规则: 变量名只能是 字母、数字或下划线的任意组合 变量名的第一个字符不能是数字 关键字不能声明为变量名 2、变量类型 整型:Python中可以处理任意大小的整数(Python 2.x中有int和long两种类型的整数,但这种区分对Python来说意义不大,因此在Python 3.x中整数只有int这一种了),而且支持二进制(如 0b100 ,换算成十进制是4)、八进制(如 0o100 ,换算成十进制是64)、十进制( 100 )和十六进制( 0x100 ,换算成十进制是256)的表示法。 浮点型:浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,浮点数除了数学写法(如 123.456 )之外还支持科学计数法(如 1.23456e2 )。 字符串型:字符串是以单引号或双引号括起来的任意文本,比如 'hello' 和 "hello" ,字符串还有原始字符串表示法、字节字符串表示法、Unicode字符串表示法,而且可以书写成多行的形式(用三个单引号或三个双引号开头,三个单引号或三个双引号结尾)。 布尔型:布尔值只有 True 、 False 两种值,要么是 True ,要么是 False ,在Python中,可以直接用 True 、 False 表示布尔值

js之var的重要性

人盡茶涼 提交于 2020-03-06 02:18:06
var的重要性 加var是声明变量,其作用域取决于在哪里声明的,不加var这是个赋值,运用作用域规则(一层一层往外找),会污染全局 < ! DOCTYPE html > < html > < head > < title > < / title > < script type = "text/javascript" > window . str = 'union' ; function t1 ( ) { //var str = 'china';//var声明st变量,为t1的局部变量。 function t2 ( ) { //var str = 'japan'; //加var是声明变量,其作用域取决于在哪里声明的 str = 'japan' ; //不加var这是个赋值,运用作用域规则(一层一层往外找),会污染全局 alert ( str ) ; } t2 ( ) ; } t1 ( ) ; alert ( window . str ) ; < / script > < / head > < body > < / body > < / html > 来源: CSDN 作者: bthyla 链接: https://blog.csdn.net/qq_45666248/article/details/104671754

JavaScript -- 闭包与作用域链

岁酱吖の 提交于 2020-03-06 01:38:34
什么是闭包 红宝书上解释: 闭包 是指有权访问另外一个函数作用域中的变量的函数.闭包就是能够读取其他函数内部变量的函数 MDN 上解释: 闭包是由函数以及创建该函数的词法环境组合而成。这个环境包含了这个闭包创建时所能访问的所有局部变量。 要理解闭包必须先理解什么是作用域以及作用域链。 作用域及作用域链 作用域分为全局作用域和函数作用域,es6 后又引入了块级作用域的概念。 作用域在代码定义的时候就产生了且不会改变,全局变量作用在全局作用域中,而函数内声明的局部变量是在函数作用域中,外部作用域无法访问内部的函数作用域中的变量。 作用域作用: 限制变量的访问权限和访问顺序,隔离变量使不同作用域下的同名变量不会产生冲突。 作用域链: 访问变量时,先查找自身函数作用域内是否有该属性,没有再向外查找父级作用域中是否含有该属性,直到最外层全局作用域,直到即可以访问,没有则报错 ReferenceError,访问变量查找作用域的这个顺序及其层级关系称为作用域链,访问变量时是在作用域链中自下而上(由内到外)查找。 看下面两个作用域的例子: 例子1: var x = 10 function fn ( ) { console . log ( x ) } function show ( f ) { var x = 20 f ( ) //即调用函数 fn(),访问变量 x

通俗理解tf.name_scope()、tf.variable_scope()

你。 提交于 2020-03-06 00:10:54
前言:最近做一个实验,遇到TensorFlow变量作用域问题,对tf.name_scope()、tf.variable_scope()等进行了较为深刻的比较,记录相关笔记: tf.name_scope()、tf.variable_scope()是两个作用域函数,一般与两个创建/调用变量的函数tf.variable() 和tf.get_variable()搭配使用。常用于: 1)变量共享;2)tensorboard画流程图进行可视化封装变量。 通俗理解就是:tf.name_scope()、tf.variable_scope()会在模型中开辟各自的空间,而其中的变量均在这个空间内进行管理,但是之所以有两个,主要还是有着各自的区别。 1.name_scope 和 variable_scope: name_scope 和 variable_scope主要用于变量共享。其中,变量共享主要涉及两个函数:tf.variable() 和tf.get_variable();即就是必须要在tf.variable_scope的作用域下使用tf.get_variable()函数。这里用tf.get_variable( ) 而不用tf.Variable( ),是因为前者拥有一个变量检查机制,会检测已经存在的变量是否设置为共享变量,如果已经存在的变量没有设置为共享变量,TensorFlow

python06-函数内存图、作用域、实参、形参

自作多情 提交于 2020-03-05 20:21:16
一、函数内存图 1 """ 2 函数内存图 3 练习:exercise06.py 4 练习:exercise07.py 5 15:40 6 """ 7 8 # 在方法区中存储函数代码,不执行函数体 9 def fun01(a): 10 a = 100 11 12 num01 = 1 13 # 因为调用函数,所以开辟一块内存空间,叫做栈帧 14 # 用于存储在函数内部定义的变量(包含参数). 15 fun01(num01) 16 # 函数执行完毕后,栈帧立即释放(其中定义的变量也会销毁). 17 print(num01)#1 18 19 def fun02(a): 20 # 改变的是传入的可变对象 21 a[0] = 100 22 23 list01 = [1] 24 fun02(list01) 25 print(list01[0])# 100 26 27 def fun03(a): 28 # 改变的是fun03栈帧中变量a的指向 29 a = 100 30 31 32 list01 = [1] 33 fun03(list01) 34 print(list01[0])# 1 35 36 37 def fun04(a): 38 a[1] = [200] 39 40 list01 = [1,[2,3]] 41 fun04(list01) 42 print(list01[1])# [200

指令<AngularJs>

孤街浪徒 提交于 2020-03-05 17:05:36
指令<AngularJs> 对于指令。能够把它简单的理解成在特定DOM元素上执行的函数,指令能够扩展这个元素的功能。 首先来看个完整的參数演示样例再来具体的介绍各个參数的作用及使用方法: angular.module('myApp', []) .directive('myDirective', function() { return { restrict: String, priority: Number, terminal: Boolean, template: String or Template Function: function(tElement, tAttrs) {...}, templateUrl: String, replace: Boolean or String, scope: Boolean or Object, transclude: Boolean, controller: String or function(scope, element, attrs, transclude, otherInjectables) { ... }, controllerAs: String, require: String, link: function(scope, iElement, iAttrs) { ... }, compile: // 返回一个对象或连接函数

JavaScript作用域

只愿长相守 提交于 2020-03-05 11:41:16
1.作用域 JavaScript的作用域与C、Java等语言不同,它不是以花括号包围的块级作用域,这个特性经常被大多数人忽视。例如下面代码,在大多数类C的语言中会出现变量未定义的错误,但在JavaScript中却完全合法 : if (true) { var msg = 'msg'; } console.log(msg); // 输出 msg; 这是因为JavaScript的作用域完全是由函数来决定的,if、for语句中的花括号不是独立的作用域。 2.函数作用域 不同于大多数类C的语言,由一对花括号封闭的代码块就是一个作用域,JavaScript的作用域是通过函数来定义的,在一个函数中定义的变量只对这个函数内部可见,我们称为函数作用域。在函数中引用一个变量时,JavaScript会先搜索当前函数作用域,如果没有找到则搜索其上层作用域,一直到全局作用域。下面是一个简单的例子: var scope = 'global'; var f1 = function() { console.log(scope); } f1(); // 输出 global var f2 = function() { var scope = 'f2'; console.log(scope); } f2(); // 输出 f2 以上示例十分明了,JavaScript的函数定义是可以嵌套的,每一层是一个作用域