作用域

作用域面试题

别等时光非礼了梦想. 提交于 2019-12-27 03:31:14
< ! DOCTYPE html > < html lang = "en" > < head > < meta charset = "UTF-8" > < title > 04 _作用域_面试题 < / title > < / head > < body > < script type = "text/javascript" > var x = 10 ; function fn ( ) { console . log ( x ) ; } function show ( f ) { var x = 20 ; f ( ) ; //10 } show ( fn ) ; < / script > < / body > < / html > < ! DOCTYPE html > < html lang = "en" > < head > < meta charset = "UTF-8" > < title > 04 _作用域_面试题 2 < / title > < / head > < body > < script type = "text/javascript" > var fn = function ( ) { console . log ( fn ) } fn ( ) var obj = { fn2 : function ( ) { console . log ( fn2 ) /

c++理解析构函数

瘦欲@ 提交于 2019-12-27 02:22:09
析构函数有2种方式调用,一个是主动调用delete,另一个是根据RAII的规则,在对象的生命周期结束时自动析构。第一点没什么好说的,就简单讲下第二点。 对象的生命周期不等于是程序的生命周期,一般我们所谓的生命周期就是一个作用域,当变量或者对象离开这个作用域时就会自动析构。一般一对{}就是一个作用域,举个例子 int main() { for(int i=0; i<10; i++) { A a; } a//错误,脱离作用域 } 一般在函数里的对象,离开函数时才算离开作用域,即return发生时,才执行析构,所以main中定义的对象不是在你说的return 0;之前执行的。return是一个离开的标志,只有遇到了该标志,才会开始离开。for结束后,就无法使用a了,因为该对象的生命周期已结束。 全局对象的话,是在程序结束时才执行析构,即遇到main中的return时,任何程序都是从main开始,到main结束的。 如果是new的对象,即使离开了作用域也会一直存在,必须主动delete,否则只有在结束程序时才会执行析构。这里在说下内存泄漏,举个例子 void fun() { A *a = new A(); } int main() { while(1) { fun(); } reutn0; } 当离开fun时,虽然离开了作用域,但用new动态开辟空间的对象是不会析构的,你可以观察任务管理器

第3章 作用域

佐手、 提交于 2019-12-27 02:07:04
第3章 作用域 3.1 关于作用域 3.1.1 局部变量与全局变量 (1)局部变量:Go语言中,在函数体或代码块内声明的变量称为局部变量,他们的作用域只在其所属的函数体或代码块内,特别的,参数和返回值变量也是局部变量。 (2)全局变量:Go语言中,在函数体外声明的变量称为全局变量,他们的作用域都是全局(在本包范围内)。全局变量可以在整个包甚至是外部包(被到处后)使用。 (3)简式变量:Go语言中使用 “:=” 声明的变量一般也是局部变量,如果新的局部变量域同名已定义的变量不在一个作用域中,Go语言会在此作用域新定义的这个局部变量,遮盖住全局变量。 3.1.2 显式与隐式代码块 根据Go语言的规范,Go语言中的标识符作用域是基于代码块的。代码块是包裹在一对花括号{}内部的声明和语句。 特别的,Go语言中某变量具体对应的内存的分配,仅在定义时完成。即,确定某变量对应的具体内存,直接寻找其定义时对应的内存即可。 package main var ( Ga int = 100 ) func GetGa1 ( ) func ( ) int { Ga := 10 return func ( ) int { Ga = Ga + 1 return Ga // Ga对应GetGa1中的Ga := 10 } } func GetGa2 ( test func ( ) int ) func ( )

立即执行函数 IIFE

倖福魔咒の 提交于 2019-12-27 00:24:20
立即执行函数表达式 IIFE(Immediately-invoked function expression) 我们知道,在javascript(ES5)中,是没有块级作用域的概念的。看一个例子 for (var i = 0; i < 5; i++) { } console.log(i); //5 因为没有块级作用域的概念,因此,在 for 循环中声明的 i 变量实际上是一个全局变量,因此可以在全局环境中访问的到。 块级作用域,也可以称为私有作用域。也就是说只在for循环的语句块中有定义,一旦循环结束,变量 i 就会被销毁。而在ES5中,我们主要通过匿名函数的方式来块级作用域。 用作块级作用域(私有作用域)的匿名函数的语法: (function() { //此处是块级(私有)作用域 })() 以上代码定义并立即调用了一个匿名函数。将函数声明包含在一对圆括号中,表示它实际上是一个函数表达式。看看这种写法是如何产生的 var a = function() { console.log(123); }; a(); //123 我们将一个匿名函数赋值给了一个全局变量a,然后调用了这个函数 当然也可以这样调用函数 var a = function() { console.log(123); }; a(); //123 既然这种方式可以立即执行一个函数

js函数作用域

徘徊边缘 提交于 2019-12-26 23:46:24
调用函数时,创建函数作用域,函数执行完毕后,函数作用域销毁 //变量提前 //并不是赋值提前,变量a提前此时a的值为undefined, //而同名的函数提前,将会覆盖变量a,使a的值成为为函数。 var a = 10 ; function fun ( ) { var a = "我是fun函数中的变量a" ; var b = 20 ; //console.log("a = "+a); function fun2 ( ) { console . log ( "a = " + window . a ) ; } fun2 ( ) ; } //fun(); //console.log("b = "+b); 使用var关键字声明的变量,会在函数中所有的代码执行之前被声明 函数声明也会在函数中所有的代码执行之前执行 也可以这么认为在声明变量和显示声明函数的时候,函数的值会覆盖变量。 对于变量覆盖:只是针对重新声明变量。 同一个作用域中,会进行值得覆盖,函数覆盖变量;变量覆盖变量;函数覆盖函数。 .作用域嵌套 当一个作用域嵌套在另一个块或函数中,就产生了作用域嵌套。 function fun ( 1 ) { var a = b ++ ; function fun1 ( c ) { console . log ( a , b , c ) ; } fun1 ( c ++ ) ; } fun ( 1

函数二函数进阶

孤者浪人 提交于 2019-12-26 21:50:39
函数进阶 动态参数(形参第三种传参方式) **1.1 *args** 动态位置参数,可将不定数目的位置参数全部接收 从实参角度来看:定义函数时,*将所有的位置参数聚合到一个元组中,并赋值给args。 def eat(*args): print(args) print(f'我请你吃:{args}') eat('蒸羊羔','蒸熊掌','蒸鹿尾','烧花鸭','烧企鹅') 结果: ('蒸羊羔', '蒸熊掌', '蒸鹿尾', '烧花鸭', '烧企鹅') 我请你吃:('蒸羊羔', '蒸熊掌', '蒸鹿尾', '烧花鸭', '烧企鹅') 1.2 ****kwargs**动态关键字参数,可将不定数目的关键字参数全部接收 ​ 从实参角度来看:定义函数时,*将所有的关键字参数聚合成一个字典,并赋值给kwargs。 def func(**kwargs): print(kwargs) func(name='alex',age=84,hobby='唱跳rap篮球') 结果: {'name': 'alex', 'age': 84, 'hobby': '唱跳rap篮球'} *args与**kwargs合称为万能参数 def func(*args,**kwargs): print(args,kwargs) func(1,2,4,'fjdksal',age=84,hobby='唱跳rap篮球') 结果: (1,

python 10 形参角度 名称空间 加载顺序

本小妞迷上赌 提交于 2019-12-26 21:50:23
今日内容大纲 如何在工作中不让别人看出你是培训出来的? 第一天环境安装等等,小白各种问。 项目需求不清晰,也不敢问。 我们6个月一定要学会自主学习,自己解决问题的能力。 形参角度: 万能参数。 *的魔性用法。 仅限关键字参数(了解)。 形参的最终顺序。 名称空间。 全局名称空间,局部........ 加载顺序,取值顺序。 作用域。 函数的嵌套(高阶函数)。 内置函数 globals locals 关键字:nonlocal global。 昨日内容回顾作业讲解 函数是以功能为导向,减少重复代码,提高代码的可读性。 def func(): 函数体 函数的调用:func() func() func() func() 函数的返回值 return 终止函数。 return 单个值: return 多个值:(1,2,3,'alex') 函数的参数: 实参角度:位置参数,关键字参数,混合参数。 形参角度:位置参数,默认参数。 今日内容 如何在工作中不让别人看出你是培训出来的? 第一天环境安装等等,小白各种问。 项目需求不清晰,也不敢问。 我们6个月一定要学会自主学习,自己解决问题的能力。 形参角度: 万能参数。 *的魔性用法。 # 万能参数。 # def eat(a,b,c,d): # print('我请你吃:%s,%s,%s,%s' %(a,b,c,d)) # # eat('蒸羊羔',

万能参数,命名空间,函数的嵌套

依然范特西╮ 提交于 2019-12-26 21:49:57
万能参数 *的魔性用法 #万能参数 可以接受所有的实参。 万能参数:*args,约定俗称:arge 函数定义时,*代表聚合。他将所有的位置参数聚合成一个元祖,赋值给了args。 def eat(*args): print(args) print('我请你吃:%s,%s,%s,%s,%s,%s'%args) eat('蒸羊羔','蒸熊掌','蒸鹿影','烧花鸭','烧雏鸡','烧子鹅') #写一个函数:计算你传入函数的所有数字的和。 def func(*args): count=0 for i in args: count+=i return count print(func(1,2,3,4,5)) **kwargs 函数的定义时:**将所有的关键字参数聚合到一个字典中,将这个字典赋值给了kwargs def func(**kwargs): print(kwargs) func(name='alex',age=73,sex='laddyboy') 万能参数:*args,**kwaygs, def func(*args,**kwargs): print(arhs) print(kwargs) func() #在函数调用时,*代表打散。**代表打散字典 def func(*args,**kwargs): print(args) print(kwargs) func(*[1,2,3,4],

Python之函数

佐手、 提交于 2019-12-26 21:38:43
为什么要使用函数? 在说明原因之前,我们先来看一个需求,比如你的boss需要你写实现以下的打印输出,并插入在某段程序代码的20个位置都条件此打印输出: ******************** ******************** hello,python! ******************** ******************** 你咔咔咔就用代码实现了需求,并将代码添加到了程序的20个位置,代码如下,但是你的boss看着你的代码却不是很认可,他说:如果我现在需要你把所有的"*"都换成"#"。你一脸懵逼,难道要一个一个的改吗? print( """ ******************** ******************** hello,python! ******************** ******************** """ ) 苦苦思索不得果,询问boss,boss捋了捋袖子,几下就给你搞定了,对你说:去学学函数吧,便离去,深藏功与名,代码如下: def index(): """打印符号""" print('*'*20) def say(): """打印问候""" print("hello,python!") index() index() say() index() index() 你看了一眼代码豁然开朗,那么这里这么写到底有什么好处呢?

JAVA第二阶段第十六天 JSP技术(下)

早过忘川 提交于 2019-12-25 22:37:39
JSP 九大内置对象 1.out:输出对象 (重点) 2.page:页面对象 3.pageContext:页面上下文对象 (重点) 4.request:转发 (重点) 5.response:重定向 (重点) 6.session:会话 (重点) 7. application:类似servletContext,作用域都是随着服务器的开启而开启 8.config:获取配置信息 9.exception:异常对象 out 对象的两个常用方法 就类似于 servlet 的PriterWriter() 常规的方法: Writer():写页面数据 print():一般与ajax进行搭配 JSP 四大作用域对象 1.pageContext:作用域:只能获取到当前页面的值 2.request:作用域:在本次转发的情况下都能获取到其值,只要是重新请求,就不能获取到 3.session:作用域:在整个回话中,随着会话窗口的关闭而关闭 4.application:作用域:在整个服务器内,随着服务器的关闭而关闭 注意点: 1.el表达式获取作用域下的值,如果键同名:获取的就是最小的那个作用域下的值 ,建议一般不要给同名的 2.el表达式获取指定的值:语法:${xxxScope.key} 万能的狗皮膏药 ${pageContext.request.contextPath}:路径就是到web目录,一般给< a>