作用域

函数的作用域链的理解

强颜欢笑 提交于 2020-01-17 23:19:11
1. 作用域 (scope):在javascript 没有块级作用域 ,是由函数来划分的。 变量和函数的作用域是在定义时决定而不是执行时决定 ,也就是说词法作用域取决于源码,通过静态分析就能确定,因此词法作用域也叫做静态作用域(with和eval除外)。当定义了一个函数,当前的作用域链就保存起来,并且成为函数的内部状态的一部份。在最顶级作用域链仅由全局对象组成,而不和词法作用域相关,然而,当定义一个嵌套的函数时,作用域链就包括外面的包含函数。这意味着嵌套函数可以访问包含函数的所有参数和局部变量。尽管当一个函数定义时作用域链就固定了,但作用域链中定义的属性还没有固定。作用域链是活的,并且函数被调用时,可以访问任何当前的绑定。 2. 作用域链 (scope chain):存储 变量对象 的集合( 环境栈 ?),保证对执行环境有权访问的所有变量和函数的有序访问,也就是用于标识符解析(变量访问)。 3. 执行环境 (execution context):定义了变量和函数有权访问的其他数据,决定了它们的各自行为。每个执行环境都有一个与之关联的变量对象。 在web浏览器中,window对象就是全局执行环境。每个函数都有自己的执行环境,当函数执行完毕,该环境被销毁,保存在其中的变量和函数也随之销毁。 4. 变量对象 (variable object):保存了环境中定义的所有变量和函数

js 作用域和作用域链

喜夏-厌秋 提交于 2020-01-17 23:12:16
 作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。 JavaScript作用域   任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。   1. 全局作用域(Global Scope)   在代码中任何地方都能访问到的对象拥有全局作用域,一般来说以下几种情形拥有全局作用域:   (1)最外层函数和在最外层函数外面定义的变量拥有全局作用域,例如: 1 2 3 4 5 6 7 8 9 10 11 12 var authorName= "山边小溪" ; function doSomething(){ var blogName= "梦想天空" ; function innerSay(){ alert(blogName); } innerSay(); } alert(authorName); //山边小溪 alert(blogName); //脚本错误 doSomething(); //梦想天空 innerSay() //脚本错误   (2

JS中的作用域和作用域链

烈酒焚心 提交于 2020-01-17 23:06:27
本文原链接: https://cloud.tencent.com/developer/article/1403589 前言 作用域(Scope) 1. 什么是作用域 2. 全局作用域和函数作用域 3. 块级作用域 作用域链 1.什么是自由变量 2. 什么是作用域链 3. 关于自由变量的取值 作用域与执行上下文 解释阶段: 执行阶段: 参考文章和书籍 关于Fundebug 前言 JavaScript 中有一个被称为作用域(Scope)的特性。虽然对于许多新手开发者来说,作用域的概念并不是很容易理解,本文我会尽我所能用最简单的方式来解释作用域和作用域链,希望大家有所收获! 作用域(Scope) 1. 什么是作用域 作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。可能这两句话并不好理解,我们先来看个例子: function outFun2() { var inVariable = "内层变量2"; } outFun2();//要先执行这个函数,否则根本不知道里面是啥 console.log(inVariable); // Uncaught ReferenceError: inVariable is not defined 从上面的例子可以体会到作用域的概念,变量 inVariable 在全局作用域没有声明

javascript作用域链学习笔记

↘锁芯ラ 提交于 2020-01-17 23:03:36
作用域链 ”JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里.” ——权威指南 在JavaScript中,一切皆对象,包括函数。函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。其中一个内部属性是[[Scope]],由ECMA-262标准第三版定义,该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。 在一个函数被定义的时候, 会将它定义时刻的scope chain链接到这个函数对象的[[scope]]属性. 在一个函数对象被调用的时候,会创建一个活动对象(也就是一个对象), 该对象包含了函数的所有局部变量、命名参数、参数集合以及this,然后此对象会被推入作用域链的前端,当运行期上下文被销毁,活动对象也随之销毁。 在每次调用一个函数的时候 ,就会进入一个函数内的作用域,当从函数返回以后,就返回调用前的作用域. 实例解析 var sayHello = function(l,s){ var word = "hello world"; } sayHello(); 在执行sayHello定义语句的时候, 会创建一个这个函数对象的[[scope]]属性。 将这个[[scope]]属性, 链接到定义它的作用域链上。此时因为func定义在全局环境,

理解 JavaScript 作用域和作用域链

房东的猫 提交于 2020-01-17 23:02:35
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。 JavaScript作用域 任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。   1. 全局作用域(Global Scope)   在代码中任何地方都能访问到的对象拥有全局作用域,一般来说以下几种情形拥有全局作用域:   (1)最外层函数和在最外层函数外面定义的变量拥有全局作用域,例如: var authorName="山边小溪"; function doSomething(){ var blogName="梦想天空"; function innerSay(){ alert(blogName); } innerSay(); } alert(authorName); //山边小溪 alert(blogName); //脚本错误 doSomething(); //梦想天空 innerSay() //脚本错误 (2)所有末定义直接赋值的变量自动声明为拥有全局作用域,例如: function

理解 JavaScript 作用域和作用域链

a 夏天 提交于 2020-01-17 23:01:48
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。 JavaScript作用域   任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。   1. 全局作用域(Global Scope)   在代码中任何地方都能访问到的对象拥有全局作用域,一般来说以下几种情形拥有全局作用域:   (1)最外层函数和在最外层函数外面定义的变量拥有全局作用域,例如: 1 2 3 4 5 6 7 8 9 10 11 12 var authorName= "山边小溪" ; function doSomething(){ var blogName= "梦想天空" ; function innerSay(){ alert(blogName); } innerSay(); } alert(authorName); //山边小溪 alert(blogName); //脚本错误 doSomething(); //梦想天空 innerSay() //脚本错误   (2

php笔记之函数

*爱你&永不变心* 提交于 2020-01-17 12:33:57
函数初步 基本概念 函数是模块化程序的产物,在实际开发过程中,我们会将一个项目划分为各个大的功能模块,通时将大的功能模块发为小的功能,在使用函数这个最小的功能(一个动作)实现 从代码上看,函数就是使用{},将完成摸个功能的代码括起来(封装),在使用function关键字,为这段代码设置一个名字,这个名字就是函数名,函数名后必须有(),这个()表示函数只能被调用 申明语法 语法: function funName(参数列表){ 函数体 【return 值】 } 示例: 调用语法: 语法: funName(实参列表); 示例: 函数名 php函数名是不区分大小写,函数名的命名规则和变量名相同,只能包含字母、数字、下划线。而且以字母下划线开头 可变函数 如果$a的值是另一个变量的名,那么可以适应$$a来访问另一个变量的值 如果$a变量的值是另一个函数名,那么可以使用这个变量来访问函数 示例: 示例: 函数体 完成某一段功能的代码段 return语句 在我们函数完成一些功能时,又是会将函数计算的数据,传递出来。此时可以使用return 提示: 程序是用于处理西湖局,函数所处理的数据有两个方向 其一,从内而外使用return 其二,从外而内 使用实参和形参 函数内部可以有多个return 只要遇到一个return就会中断函数的执行 函数内也可以省略return语句 匿名函数

Java面试题技术类一

柔情痞子 提交于 2020-01-17 00:40:38
1、面向对象编程的三大特性是什么? (1).继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继 承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增 加新的方法使之更适合特殊的需要。 (2).封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 (3).多态: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据这个String类提供了数值不可改变字符串而这个StringBuffer类提供的字符串进行修改当你知道字符数据要改变的时候你就可以使用StringBuffer典型地,你可以使用StringBuffers来动态构造字符数据 3、说出ArrayList,Vector,

Python函数作用域和匿名函数以及闭包、回调、递归的使用

老子叫甜甜 提交于 2020-01-16 14:47:34
# 函数的作用域 # 全局变量不会去拿局部变量的东西 # 局部变量有的东西就拿自己的,没有就拿全局变量的 # global 可以改变全局变量的值 a = 8 # 全局变量 c = 6 def f ( ) : # 局部变量 global a # global:当局部的需要改变全局的就用 b = 5 a = a + 1 # 强行要改变全局变量的东西,报错 print ( a ) # 输出 9 def f2 ( ) : nonlocal b # nonlocal:当局部的使用局部的就用 b = b + 1 print ( b ) # 输出 6 f2 ( ) f ( ) print ( a ) # 输出 9 # 匿名函数 li = [ 1 , 23 , 4 , 12 , 42 , 2 ] print ( list ( filter ( lambda o : o > 10 , li ) ) ) # 闭包:外层函数返回内层函数名称为闭包 现在需要在全局来调用f2函数 def f ( ) : print ( '这里是f函数' ) def f2 ( ) : print ( '这里是f2函数' ) return f2 # f2 函数名 l = f ( ) l ( ) 函数什么时候执行 : 函数名加括号 return 返回的是什么l就是什么 # 递归:函数自己调用自己 def f ( ) :

Spring Bean的生命周期和作用域

痞子三分冷 提交于 2020-01-16 02:49:27
Bean的作用域 Spring应用中,对象实例都是在Container中,负责创建、装配、配置和管理生命周期(new到finalize()) Spring Container分为两种:   1、BeanFactory:提供DI支持   2、ApplicationContext:基于 BeanFactory构建,提供应用框架级别的服务 ApplicationContext实现类 :    1、AnnotationConfigApplicationContext: 从一个或多个基于Java的配置类中加载Spring应用上下文    2、AnnotationConfigWebApplicationContext: 从一个或多个基于Java的配置类中加载Spring Web应用上下文    3、ClassPathXmlApplicationContext: 从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源    4、FileSystemXmlappl icationcontext : 从文件系统下的一个或多个XML配置文件中加载上下文定义    5、XmlWebApplicationContext: 从Web应用下的一个或多个XML配置文件中加载上下文定义 加载上下文的方式都很相似:都是直接new。例如:ApplicationContext