作用域

作用域和闭包

孤街浪徒 提交于 2020-01-25 21:39:09
1.作用域 作用域其实就代表了变量合法的使用范围。 作用域分为全局作用域、函数作用域和块级作用域。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 var n=999; function f1(){   alert(n); } f1(); // 999 但是,在函数外部自然无法读取函数内的局部变量。 function f1(){   var n=999; } alert(n); // error 这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量! function f1(){   n=999; } f1(); alert(n); // 999 2.作用域链 一个变量在当前作用域没有被定义,但被使用了,会向上级作用域,一层层寻找,直至找到为止。 这就是Javascript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。 所有自由变量的查找,是在函数定义的地方,向上级作用域查找,而不是在执行的地方!!!!!! function f1(){    var n=999;    function f2(){      alert(n); // n在这个作用域内就是自由变量,999   } } 3.闭包 闭包就是能够读取其他函数内部变量的函数。

MyEclipse中最常用的快捷键大全

心不动则不痛 提交于 2020-01-25 20:36:16
1. 【ALT+/】 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类、方法和属性的名字时,多体验一下【ALT+/】快捷键带来的好处吧。 2. 【Ctrl+O】 显示类中方法和属性的大纲,能快速定位类的方法和属性,在查找Bug时非常有用。 3. 【Ctrl+/】 快速添加注释,能为光标所在行或所选定行快速添加注释或取消注释,在调试的时候可能总会需要注释一些东西或取消注释,现在好了,不需要每行进行重复的注释。 4. 【Ctrl+D】 删除当前行,这也是笔者的最爱之一,不用为删除一行而按那么多次的删除键。 5. 【Ctrl+M】 窗口最大化和还原,用户在窗口中进行操作时,总会觉得当前窗口小(尤其在编写代码时),现在好了,试试【Ctrl+M】快捷键。 查看和定位快捷键 在程序中,迅速定位代码的位置,快速找到Bug的所在,是非常不容易的事,Eclipse提供了强大的查找功能,可以利用如下的快捷键帮助完成查找定位的工作。 1. 【Ctrl+K】、【Ctrl++Shift+K】 快速向下和向上查找选定的内容,从此不再需要用鼠标单击查找对话框了。 2. 【Ctrl+Shift+T】 查找工作空间(Workspace)构建路径中的可找到Java类文件,不要为找不到类而痛苦,而且可以使用“*”、“?”等通配符。 3. 【Ctrl+Shift+R】 和

关于for循环的块级作用域问题总结(一)

爷,独闯天下 提交于 2020-01-25 11:10:40
最近有小伙伴问到关于for循环和作用域的问题,那么我们今天来总结 一下,遇到这样的问题应该如何解答,当for循环和异步操作又会产生奇妙的作用,今天先不进行总结 先看个正常的for循环吧 for ( var i = 0 ; i < 5 ; i ++ ) { console . log ( i ) } 1.这是个最简单的for循环的遍历,控制台将打印0,1,2 , 3,4 我们来将这个代码变动一下: for ( var i = 0 ; i < 5 ; i ++ ) { } console . log ( i ) ; 2.控制台将只打印5,这个原因是因为JavaScript中没有块级作用域导致的。对于有块级作用域的语言来讲,for语句初始化变量的表达式所定义的变量,只会存在于循环的循环境之中。而对于JavaScript而言,由for语句创建的变量i即使在for循环执行结束后,也依旧会存在于循环外部的执行环境中。 我们来继续变动一下: for ( let i = 0 ; i < 5 ; i ++ ) { } console . log ( i ) ; 3.我们把var改成了let,控制台报错i is not defined。 这是因为let是es6新增的语法,而let具有块级作用域的特点,这么一来let声明的变量只在它所在的代码块有效,所以在外部是访问不到的。 来源: CSDN 作者:

18 Python - 函数定义与参数

风格不统一 提交于 2020-01-25 03:37:08
12 函数定义与参数 01函数 (1)定义:   def 函数名(参数1,参数2……):    函数体    return 结果 (2)调用:   函数名(实际参数) (3)函数作用: 最大化代码重用,   最小化代码冗余,   过程分解 (4)函数参数和返回值   例子1:形参 实参   def learning(name, course, start, end):    print('{}报名k课程:《{}》'.format(name, course))    print('从{}学习都第{}节'.format(start, end))    print('{}退出学习'.format(name))   learning('Tom', 'Python入门', 1, 3)   结果   Tom报名k课程:《Python入门》   从1学习都第3节   Tom退出学习   例子2:return返回值   def add_number(x, y):    result = x+y    return result   print(add_number(3, 5))   结果   8   例子3:形参实参+return   def intersect(seq1, seq2):    res = []    for k in seq1:    if k in seq2:    res

python学习笔记:函数

£可爱£侵袭症+ 提交于 2020-01-24 19:59:20
文章目录 函数定义 参数 关键字参数 收集参数 分配参数 作用域 函数定义 函数是使用def语句定义的。函数由语句块组成他们从外部接收值(参数),并可能返回一个或多个值(计算结果)。 如: def hello ( name ) : return 'Hello, ' + name + ' !' 定义完函数后,就可以像使用内置函数那样使用这个函数: >> > print ( hello ( 'tang' )) Hello, tang ! >> > print ( hello ( 'Li' )) Hello, Li ! 在自定义函数中,return语句很重要 ,return语句用于从函数返回值 参数 函数通过参数接收所需的信息,在python中,参数有两类,位置参数和关键参数。 关键字参数 使用名称指定的参数成为关键字参数,主要优点是有助于澄清各个参数的作用,然而,关键字参数最大的有点在于,可以指定默认值; def hello ( greeting = 'hello' , name = 'world' ) : print ( '{},{}!' . format ( greeting , name ) ) 像这样 指定默认值后,调用函数时,可不提供它,可以根据需要,一个参数值也不提供、提供部分参数或提供全部参数 >> > hello ( ) hello,world ! >> > hello

第2章 Spring中的Bean

六眼飞鱼酱① 提交于 2020-01-24 06:53:24
2.1 Bean的配置 Bean本质是Java中的类。Spring可以被看做一个大型工厂,这个工厂的作用就是生产和管理Spring容器zho中的Bean。想在项目中使用这个工厂,就需要对Spring的配置文件进行配置。 Spring支持XML和Properties两种格式的配置文件。常用XML文件配置,该方式通过XML文件来注册并管理Bean之间的依赖关系。 XML配置文件的根元素是<beans>,包含了多个<bean>子元素,每个子元素地定义一个Bean。 <bean>元素的常用属性及其子元素 如果在Bean中未指定id和name,则Spring会把class的值当做id使用。 getBean( id/name/class ); 2.2 Bean的实例化: 2.21 构造器实例化:Spring容器通过Bean对应类中默认的无参构造方法来实例化Bean package com.itheima.instance.constructor;public class Bean1 { <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi

作用域 预解析

谁都会走 提交于 2020-01-24 05:30:24
作用域 域:空间 范围 区域 作用:读、写 1.script 全局变量 全局函数 自上而下一块执行完毕执行下一块 2.函数  由里到外 浏览器 js解析器 1.找一些东西:根据关键字 var function 参数 a=未定义 所有的变量,在代码正式运行之前,都提前赋了一个值:未定义 fn1=function fn1(){alert(2);}   所有的函数,在代码正式运行之前,都是整个函数块    JS预解析 (形成一个仓库)   注:遇到重名的,只留一个     变量和函数重名了,就只留下函数 例1: var a=1; function fn1(){   alert(a); //undefined 函数作用域   var a=2; } fn1(); alert(a);  // 1 例2 var a=1; function fn1(){   alert(a); //1   a=2; } fn1(); alert(a);  // 2 2.逐行解读代码  表达式:= + - * / % ! ++ -- 参数 能够改变值的动作  表达式可以改预解析的值 alert(a); //function a(){alert(4);} var a=1; alert(a); //1 function a(){alert(2);} alert(a); //1 var a=3; //3 alert(a)

什么是angualr控制器?

老子叫甜甜 提交于 2020-01-24 05:05:44
这里是修真院前端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析前端知识/技能。 大家好,我是IT修真院深圳分院叶泽彪,一枚正直纯洁善良的WEB程序员。 今天给大家分享一下,修真院官网JS任务2,深度思考中的知识点——angualr控制器是什么? 1.背景介绍 了解控制器之前,我们先来了解一下什么是MVVM模式。MVVM模式是Model-View-ViewMode(模型-视图-视图模型)模式的简称。 在angular中MVVM模式主要分为四部分: View:它专注于界面的显示和渲染,在angular中则是包含一堆声明式Directive的视图模板。 ViewModel:它是View和Model的粘合体,负责View和Model的交互和协作,它负责给View提供显示的数据,以及提供了View中Command事件操作Model的途径;在angular中$scope对象充当了这个ViewModel的角色; Model:它是与应用程序的业务逻辑相关的数据的封装载体,它是业务领域的对象,Model并不关心会被如何显示或操作,所以模型也不会包含任何界面显示相关的逻辑。在web页面中,大部分Model都是来自Ajax的服务端返回数据或者是全局的配置对象

函数的动态参数与命名空间 day10

懵懂的女人 提交于 2020-01-24 04:33:10
一、动态参数(不定长参数)def func(*args): 形参: 3种 动态参数 args元组,他包含了你所有的位置参数. *args 动态参数,不定长参数 **kwargs 他包含了关键字动态参数 *rarge用法 def func(*args): print(args,type(args)) func(1,2,'alex',3,4,5,6,8,4,7,2) 结果 *args按位置对应不能放到,其他形参位置前边 def func(*args,a,b,c): print(a) print(b) print(c) print(args,type(args)) func(1,2,'alex',3,4,) 结果 正确用法 def func(a,b,c,*args): print(a) print(b) print(c) print(args,type(args)) func(1,2,'alex') 结果 位置参数,*args,默认参数,**kwargs def func(a,b,c,sex = '男',*args): print(a) print(b) print(c) print(sex) print(args,type(args)) func(1,2,'alex','wusir','ritian ' 结果 sex='男’被wusir覆盖 def func(a,b,c,*args

函数补充:动态参数,函数嵌套,global与nonlocal关键

时间秒杀一切 提交于 2020-01-24 03:53:24
一丶动态参数    1.*args 位置参数,动态传参 def func(*food): print(food) print(func("米饭","馒头","福建人","犹太人"))   将所有的位置参数都赋给*food    2.**kwargs 关键字参数,动态传参 # 关键字的动态传参 def eat(**food): print(food) print(eat(广东人= "福建人",goodeat = "饼干",我的天="飞天"))   将关键字参数,以字典的形式赋给**food    3.默认参数与动态参数的关系      如果以位置参数,关键字参数,默认参数排列会报错,我们改一下默认参数的位置,发现只有在位置参数后面,关键字参数前面,默认参数才不会报错 def func(*name,gender="男",**hobby): print(name,hobby,gender) print(func("周杰伦","谢霆锋","吴京",hobby1="看电影",hobby2="唱歌"))    总结一下顺序:       位置参数>*args>默认值参数>**kwargs   如果想接收所有参数,可以用*arge 和 **kwargs组合 def trans_para(*args,**kwargs): print(args) print(kwargs) trans_para(