作用域

深入理解JavaScript执行上下文

好久不见. 提交于 2019-12-04 17:37:18
在 《深入理解JavaScript执行上下文栈》 这篇文章中,我们已经介绍了执行上下文相关概念: 执行上下文 分类:全局上下文、函数上下文 全局上下文:执行全局代码时,创建全局上下文。 函数上下文:执行函数时,创建函数上下文。 主要属性: 变量对象(Variable object,VO) 作用域链(Scope chain) this 这一篇我们将介绍执行上下文的具体处理过程。 示例 我们来看一个经常在面试中被问到的问题: var scope = 'global scope' function checkscope () { var scope = 'local scope' function f () { return scope } return f() } checkscope() var scope = 'global scope' function checkscope () { var scope = 'local scope' function f () { return scope } return f } checkscope()() 我们发现这两段代码最后输出的都是’local scope’,那么这两段代码有什么不同呢? 具体分析 我们结合前面所学的执行上下文栈、变量对象、作用域链相关知识来分析一下这两段代码的执行过程。 首先我们先来看第一段代码: var

学习第三天(2019-11-16)

这一生的挚爱 提交于 2019-12-04 16:28:31
第六章 面向对象的程序设计 ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数。”可以把这里的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。 1、对象的属性类型 ECMAScript中有两种属性:数据属性和访问器属性。 a:数据属性 数据属性包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有4个描述其行为的特性。 [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特 性,或者能否把属性修改为访问器属性,默认值为 true。 [[Enumerable]]:表示能否通过 for-in 循环返回属性,默认值为 true。 [[Writable]]:表示能否修改属性的值,默认值为 true。 [[Value]]:包含这个属性的数据值,默认值为 undefined。 要修改属性默认的特性,可以使用 ECMAScript 5的Object.defineProperty()方法。这个方法 接收三个参数:属性所在的对象、属性的名字和一个描述符对象。 b:访问器属性 访问器属性不包含数据值,它们包含一对儿 getter和 setter函数(这两个函数不是必须的)。在读取访问器属性时,会调用 getter函数,这个函数负责返回有效的值; 在写入访问器属性时,会调用 setter函数并传入新值

第四周课堂笔记3th

时光怂恿深爱的人放手 提交于 2019-12-04 15:53:12
1. 函数的嵌套 作用域,说的是变量 全局作用域:内置命名空间,全局命名空间 全局空间不可以引用局部空间 局部作用域: 局部命名空间 开辟的临时空间前提是调用了函数 全局作用域在整个文件中被使用 Local : 函数内的区域,局部参数(通过 return 将局部空间的值引用出来) Endosing :外边嵌套函数区域时 Global : 全局变量(在局部作用域中声明一个全局变量,可以被调用) Build-in 内建函数 -name- 内建变量以下划线结束 Global , 作用: 1> 在局部作用域中声明一个全局变量(没有全局变量时,) 外部可以直接引用这个局部变量 2> 在局部作用域中,改变一个全局变量(有全局变量时)全局变量会被改变 在局部变量中想改变一个变量必须先声明一个变量 nonlocal 关键字在一个嵌套函数中修改嵌套作用域中的的变量 函数名的应用 来源: https://www.cnblogs.com/peiw/p/11872412.html

day11 名称空间 作用域

妖精的绣舞 提交于 2019-12-04 15:46:47
day11 名称空间 作用域 一. 三元运算符 def func(a, b): return a if a > b else b print(func(44,66)) 二:函数注释 def func(a, b): ''' 这个函数是用来计算a和b的和 :param a: 第一个数据 :param b: 第二个数据 :return: 返回的是两个数的和 ''' return a + b print(func.__doc__) #document 文档 三.命名空间(名称空间) 内置命名空间: 存放python为我们提供的名字 全局命名空间: py文件中, 函数外的变量 局部命名空间: py文件中, 函数内的变量 a = 10 def fn(): # fn也在全局名称空间, 可以认为顶格写的都是全局的 b = 20 # 变量 b 只有在函数调用时, 才会被用到 print(a) def gn(): print(a) fn() gn() # 名称空间的加载顺序: 内置-> 全局-> 局部 四.作用域: 就是作用范围, 按生效范围来分为 全局作用域: 全局和内置 局部作用域: 局部的 globals() locals() a = 10 def fn(): b = 20 def en(): c = 30 print(globals()) #可以查看全局作用域中的内容 print(locals

名称空间和作用域

浪尽此生 提交于 2019-12-04 15:33:12
名称空间和作用域 函数内部的函数只能在函数内部调用,不能在函数外部调用,通过接下来的学习你将会知道为什么会出现这种情况。 def f1(): def f2(): print('from f2') f2() f2() # NameError: name 'f2' is not defined 一、名称空间 名称空间(name spaces):在 内存管理 那一章节时,我们曾说到变量的创建其实就是在内存中开辟了一个新的空间。但是我们一直在回避变量名的存储,其实在内存中有一块内存存储变量名与变量间的绑定关系的空间,而这个空间称为名称空间。 1.1 内置名称空间 内置名称空间:存放Pyhton解释器自带的名字,如 int、float、len 生命周期:在解释器启动时生效,在解释器关闭时失效 1.2 全局名称空间 全局名称空间:除了内置和局部的名字之外,其余都存放在全局名称空间,如下面代码中的 x、func、l、z 生命周期:在文件执行时生效,在文件执行结束后失效 x = 1 def func(): pass l = [1, 2] if 3 > 2: if 4 > 3: z = 3 1.3 局部名称空间 局部名称空间:用于存放函数调用期间函数体产生的名字,如下面代码的 f2 生命周期:在文件执行时函数调用期间时生效,在函数执行结束后失效 def f1(): def f2(): print(

了解angularjs中的生命周期钩子函数$onInit,$onChange,$onDestory,$postLink

╄→尐↘猪︶ㄣ 提交于 2019-12-04 15:27:53
壹 ❀ 引 我在前面花了三篇文章用于介绍angularjs的指令directive,组件component,并专门花了一篇文章介绍directive与component的不同,其中提到在component的声明周期中需要配合钩子函数来实现组件部分功能,例如在bindings传值过程中,你得通过$onInit方法来初始化数据,那么我们就来好好聊聊component中常用的几个钩子函数,本文开始。 贰 ❀ $onInit 在介绍component的文章中已经有涉及$onInit方法的说明,$onInit用于在component的controller中做数据初始化的操作。 常理上来说,即便我们不通过$onInit为组件绑定数据也是没问题的,看个简单的例子: <div ng-controller="myCtrl"> <echo></echo> </div> angular.module('myApp', []) .controller('myCtrl', function ($scope) {}) .component('echo', { template: '<div>{{vm.name}}</div><button ng-click="vm.sayName()">点我</button>', controllerAs: 'vm', controller: function () {

Python语法速查: 7. 函数基础

佐手、 提交于 2019-12-04 15:09:22
/*--> */ /*--> */ (1)函数基本 ● 函数是第一类对象 Python中万物皆对象,所有对象都是 第一类的 (first class),函数也不例外,也是第一类对象。既然是对象,那就可以当作普通的对象数据处理,比如:拥有自己的属性、可赋值给一个变量、可放入容器存储、可作为另一个函数的参数或是返回值等等。当你在使用 def 定义函数时,就相当于生成了一个函数对象。 下例中,将3个内置函数放入一个序列,并用迭代器取出后分别调用: line = 'abc,1,3.14' fun_list = [str, int, float] para_list = line.split(',') obj_list = [f(val) for f, val n zip(fun_list, para_list)] # obj_list结果为:['abc', 1, 3.14] ● 文档字符串 通常,将函数def后的第一行,作为描述函数用途的“文档字符串”,保存在函数的__doc__属性中。用内置函数 help( 函数名 ) 也可以查看函数的描述文档。 ● 可调用类型 可调用类型表示支持函数调用操作的对象,包括:用户定义的函数、内置函数、实例方法、类、提供了可调用接口的实例。可以使用内置函数 callable() 来检查一个对象是否是可调用的。 类都是是可以调用的,调用类时

作用域、闭包、global、nonlocal

痞子三分冷 提交于 2019-12-04 14:22:26
1.作用域基础 python中一切与变量名有关的事件,都发生在赋值时,变量名在第一次赋值时才存在,同时要使用该变量必须先赋值。由于python中没有变量声明(如java、c#中),在变量赋值的区域就决定了该变量的命名空间。 在函数(def声明)中声明的变量,只能在该函数内访问,并且要可以和函数外的变量声明相同,不会互相影响,但可以通过global或nonlocal中访问函数外的变量,但两个关键字的作用域和使用范围有差异。 变量名解析原则:LEGB规则 当在函数中使用未定义的变量名时,会从4个作用域中进行查找,首先是局部作用域(L)、如果有函数嵌套函数关系,那么内在函数会查找外部函数的作用域(E)、全局作用域中查找(G)、最后是内置的作用域,内置作用域指的是python中内部定义的一些关键字,在python3.X中保存在builtins模块中(B)。 2.global global语句告诉python函数计划生成一个或多个全局变量名-----简答来说就是将一个变量定义域全局作用域中,在函数内部可以访问该变量(函数中没有相同变量名),若要修改该变量要先在函数内用global关键字声明。 在全局变量中,即使没用声明一个变量,但在函数中同样可以通过global关键字来指定一个变量为全局变量。 x=99 def f(): x+=1 #会报错,相当于x=x+1,在该函数内没有首先对x赋值

错题

∥☆過路亽.° 提交于 2019-12-04 13:43:28
一,Spring中Bean的作用域 当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域。Spring支持如下5种作用域: singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例 prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例 request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效 session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效 globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效   其中比较常用的是singleton和prototype两种作用域。对于singleton作用域的Bean,每次请求该Bean都将获得相同的实例。容器负责跟踪Bean实例的状态

javascript(4)

狂风中的少年 提交于 2019-12-04 12:11:44
函数 为什么要有函数? 在写代码的时候,有一些常用的代码需要书写多次,如果直接复制粘贴的话,会造成大量的冗余代码。 如果修改呢?? 多个页面呢?? 函数可以封装一段重复的JavaScript代码,它只需要声明一次,就可以被多次调用。 重复代码、冗余代码的缺点: 代码重复,可阅读性差 不易维护,如果代码逻辑改变了,所有地方的代码都要跟着改变,效率太低。 使用场景 : 只要js出现的地方都有函数 ​ 函数的声明与调用 就相当于之前数组的创建和使用 声明函数的语法 : function 函数名() { // 函数体 } 调用函数的语法 : 函数名 函数名() 特点: 1. 函数声明的时候,函数体并不会执行,函数体只有在调用的时候,才会执行; 2. 可以调用多次; 代码示例 : // 声明函数 function sayHi() { console.log('萨瓦迪卡'); } // 调用函数 sayHi(); 练习 : //1. 封装一个打招呼的函数 //2. 封装一个函数,计算两个数的和 //3. 封装一个函数,计算1-100之间所有数的和 函数的参数 ​ function getSum() { ​ var a = 10; ​ var b = 20; ​ console.log(a+b); } ​ // 打印的是 10+20 ​ getSum(); ​ // 想打印 20+30? 怎么办