上下文

深入理解js——执行上下文

拈花ヽ惹草 提交于 2020-02-11 05:14:42
什么是“执行上下文”?暂且不下定义,先看一段代码: 第一句报错,a未定义,很正常。第二句、第三句输出都是undefined,说明浏览器在执行console.log(a)时,已经知道了a是undefined,但却不知道a是10(第三句中)。 在运行一段js代码之前,浏览器已经做了一些“准备工作”,其中就包括对变量的声明,而不是赋值。变量赋值是在赋值语句执行的时候进行的。可用下图模拟: 这是第一种情况。 第二种情况。 有js开发经验的朋友应该都知道,你无论在哪个位置获取this,都是有值的。至于this具体的取值情况,那就比较复杂了。与第一种情况不同的是:第一种情况只是对变量进行声明(并没有赋值),而此种情况直接给this赋值。这也是“准备工作”情况要做的事情之一。 第三种情况。 需要注意代码注释中的两个名词——“函数表达式”和“函数声明”。虽然两者都很常用,但是这两者在“准备工作”时,却是两种待遇。 在“准备工作”中, 对待函数表达式就像对待“ var a = 10 ”这样的变量一样,只是声明。而对待函数声明时,却把函数整个赋值了 。 好了,“准备工作”介绍完毕。 我们总结一下,在“准备工作”中完成了哪些工作: 变量、函数表达式——变量声明,默认赋值为undefined; this——赋值; 函数声明——赋值; 这三种数据的准备情况我们称之为“执行上下文”或者“执行上下文环境”。

深入理解JavaScript系列(14):作用域链(Scope Chain)

给你一囗甜甜゛ 提交于 2020-02-11 04:55:43
前言 在第12章关于变量对象的描述中,我们已经知道一个执行上下文 的数据(变量、函数声明和函数的形参)作为属性存储在变量对象中。 同时我们也知道变量对象在每次进入上下文时创建,并填入初始值,值的更新出现在代码执行阶段。 这一章专门讨论与执行上下文直接相关的更多细节,这次我们将提及一个议题——作用域链。 英文原文:http://dmitrysoshnikov.com/ecmascript/chapter-4-scope-chain/中文参考:http://www.denisdeng.com/?p=908本文绝大部分内容来自上述地址,仅做少许修改,感谢作者 定义 如果要简要的描述并展示其重点,那么作用域链大多数与内部函数相关。 我们知道,ECMAScript 允许创建内部函数,我们甚至能从父函数中返回这些函数。 var x = 10; function foo() { var y = 20; function bar() { alert(x + y); } return bar; } foo()(); // 30 这样,很明显每个上下文拥有自己的变量对象:对于全局上下文,它是全局对象自身;对于函数,它是活动对象。 作用域链正是内部上下文所有变量对象(包括父变量对象)的列表。此链用来变量查询。即在上面的例子中,“bar”上下文的作用域链包括AO(bar)、AO(foo)和VO

008-Quartz2D

喜欢而已 提交于 2020-02-11 02:43:08
  掌握   •  1.利用drawRect:方法绘图三部曲   •  2.常见图形的绘制:线条、多边形、圆   •  3.绘图状态的设置:文字颜色、线宽等   •  4.图形上下文状态的保存与恢复(图形上下文栈)   •  5.自定义View   •  6.图片裁剪、截图 •  1.基本概念 问题一:什么是Quartz2D?   •Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统   •Quartz2D的API是纯C语言的   •Quartz2D的API来自于Core Graphics框架   •数据类型和函数基本都以CG作为前缀  ØCGContextRef  ØCGPathRef  ØCGContextStrokePath(ctx);  Ø……   •Quartz 2D能完成的工作   Ø绘制图形 : 线条\三角形\矩形\圆\弧等   Ø绘制文字\涂鸦\画板\手势解锁   Ø绘制\生成图片(图像)   Ø读取\生成PDF   Ø截图\裁剪图片   Ø报表:折线图\饼状图\柱状图   Ø… … 问题二:为什么要使用Quartz2D?   为了便于搭建美观的UI界面,iOS提供了UIKit框架,里面有各种各样的UI控件     ØUILabel:显示文字   ØUIImageView:显示图片   ØUIButton:同时显示图片和文字(能点击)   Ø… …  

DialogueGCN论文翻译

半城伤御伤魂 提交于 2020-02-09 20:10:58
对话GCN:对话中情感识别的图卷积神经网络 绪论 会话中的情感识别(ERC)最近受到了研究者的广泛关注,因为它在医疗,教育和人力资源等各个领域都有潜在的广泛应用。 在本文中,我们介绍了对话图卷积网络(DialogueGCN),这是一种基于图神经网络的ERC方法。 我们利用对话者的自我和说话者之间的依存关系来为情感识别建模会话上下文。 通过图网络,DialogueGCN解决了当前基于RNN的方法中存在的上下文传播问题。 我们凭经验表明,这种方法可以缓解此类问题,同时在许多基准情感分类数据集上的表现要优于当前水平。 1 引言 几十年来,情绪识别一直是一个活跃的研究主题(K. D’Mello等,2006; Busso等,2008; Strapparava和Mihalcea,2010)。 然而,最近在社交媒体平台(例如Facebook,Twitter,Youtube和Red dit)上开放式对话数据的激增引起了热烈的关注(Poria等人,2019b; Majumder等人,2019; Huang等人。 (2019年),从研究人员转向对话中的情感识别(ERC)。 不可否认,ERC在情感对话系统(如图1所示)中也很重要,在这种对话中,机器人可以理解用户的情绪并产生连贯和移情反应的情绪。 图1:情感对话的插图,其中情感取决于上下文。 健康助手了解用户的情感状态,以生成情感和移情反应

变量对象VO与活动对象AO

元气小坏坏 提交于 2020-02-09 15:43:07
变量对象VO 变量对象VO是与执行上下文相关的特殊对象,用来存储上下文的函数声明,函数形参和变量。在global全局上下文中,变量对象也是全局对象自身,在函数上下文中,变量对象被表示为活动对象AO。 变量对象VO存储上下文中声明的以下内容 { 函数声明FD(如果在函数上下文中),—-不包含函数表达式 函数形参function arguments, 变量声明–注意b=10不是变量,但是var b = 10;是变量,有变量声明提升 var a = 10; function test(x) { var b = 20; }; test(30); // 全局上下文的变量对象 VO(globalContext) = { a: 10, test: <reference to function> }; // test函数上下文的变量对象 VO(test functionContext) = { x: 30, b: 20 };   变量对象VO分类 全局上下文的变量对象VO,函数上下文的变量对象VO。 //全局上下文的变量对象VO就是全局对象GlobalContextVO VO(globalContext) === global; (VO === this === global) 函数上下文变量对象FunctionContextVO   (VO === AO, 并且添加了<arguments>

前端基础进阶(二):执行上下文详细图解

好久不见. 提交于 2020-02-06 07:02:12
先随便放张图 我们在JS学习初期或者面试的时候常常会遇到考核变量提升的思考题。比如先来一个简单一点的。 console.log(a); // 这里会打印出什么? var a = 20; 暂时先不管这个例子,我们先引入一个JavaScript中最基础,但同时也是最重要的一个概念 执行上下文(Execution Context) 。 每次当控制器转到可执行代码的时候,就会进入一个执行上下文。执行上下文可以理解为当前代码的执行环境,它会形成一个作用域。JavaScript中的运行环境大概包括三种情况。 全局环境:JavaScript代码运行起来会首先进入该环境 函数环境:当函数被调用执行时,会进入当前函数中执行代码 eval 因此在一个JavaScript程序中,必定会产生多个执行上下文,在我的上一篇文章中也有提到,JavaScript引擎会以堆栈的方式来处理它们。栈底永远都是全局上下文,而栈顶就是当前正在执行的上下文。 当代码在执行过程中,遇到以上三种情况,都会生成一个执行上下文,放入栈中,而处于栈顶的上下文执行完毕之后,就会自动出栈。为了更加清晰的理解这个过程,根据下面的例子,结合图示给大家展示。 var color = 'blue'; function changeColor() { var anotherColor = 'red'; function swapColors() {

前端基础进阶(二):执行上下文详细图解

与世无争的帅哥 提交于 2020-02-06 06:59:02
先随便放张图 我们在JS学习初期或者面试的时候常常会遇到考核变量提升的思考题。比如先来一个简单一点的。 console.log(a); // 这里会打印出什么? var a = 20; 暂时先不管这个例子,我们先引入一个JavaScript中最基础,但同时也是最重要的一个概念 执行上下文(Execution Context) 。 每次当控制器转到可执行代码的时候,就会进入一个执行上下文。执行上下文可以理解为当前代码的执行环境,它会形成一个作用域。JavaScript中的运行环境大概包括三种情况。 全局环境:JavaScript代码运行起来会首先进入该环境 函数环境:当函数被调用执行时,会进入当前函数中执行代码 eval(不建议使用,可忽略) 因此在一个JavaScript程序中,必定会产生多个执行上下文,在我的上一篇文章中也有提到,JavaScript引擎会以栈的方式来处理它们,这个栈,我们称其为函数调用栈(call stack)。栈底永远都是全局上下文,而栈顶就是当前正在执行的上下文。 当代码在执行过程中,遇到以上三种情况,都会生成一个执行上下文,放入栈中,而处于栈顶的上下文执行完毕之后,就会自动出栈。为了更加清晰的理解这个过程,根据下面的例子,结合图示给大家展示。 执行上下文可以理解为函数执行的环境,每一个函数执行时,都会给对应的函数创建这样一个执行环境。 var color

JS 执行上下文

怎甘沉沦 提交于 2020-02-06 06:53:28
先看个小例子 function fn(){ console.log(a);//undefined; var a = 1; } fn(); 为什么打印出来的是 undefined 呢? 执行上下文概念   当代码运行时,会产生一个对应的执行环境,在这个环境中,所有变量会被事先提出来(变量提升),有的直接赋值,有的为默认值 undefined,代码从上往下开始执行,就叫做执行上下文。   在 JavaScript 的世界里,运行环境有三种,分别是:     1.全局环境:代码首先进入的环境     2.函数环境:函数被调用时执行的环境     3.eval函数: https://www.cnblogs.com/chaoguo1234/p/5384745.html (不常用) 执行上下文特点   1.单线程,在主进程上运行   2.同步执行,从上往下按顺序执行   3.全局上下文只有一个,浏览器关闭时会被弹出栈   4.函数的执行上下文没有数目限制   5.函数每被调用一次,都会产生一个新的执行上下文环境 执行上下文栈   执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境。当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文环境。处于活动状态的执行上下文环境只有一个。   其实这是一个压栈出栈的过程——执行上下文栈。        

【1/33】调用堆栈

你说的曾经没有我的故事 提交于 2020-02-06 03:44:46
33 文章目录 调用栈 JavaScript 引擎 执行上下文 创建执行上下文 变量环境: 执行阶段 javascript事件循环 setTimeout setInterval Promise与process.nextTick(callback) 调用栈 调用栈 是解释器(就像浏览器中的JavaScript解释器)追踪函数执行流的一种机制。当执行环境中调用了多个函数函数时,通过这种机制,我们能够追踪到哪个函数正在执行,执行的函数体中又调用了哪个函数。 拥有 LIFO(后进先出)数据结构的栈,被用来存储代码运行时创建的所有执行上下文。 当 JavaScript 引擎第一次遇到你的脚本时,它会创建一个全局的执行上下文并且压入当前执行栈。每当引擎遇到一个函数调用,它会为该函数创建一个新的执行上下文并压入栈的顶部。 每调用一个函数,解释器就会把该函数添加进调用栈并开始执行。每一个进入调用栈的都称为 调用帧 。 正在调用栈中执行的函数还调用了其它函数,那么新函数也将会被添加进调用栈,一旦这个函数被调用,便会立即执行。 当前函数执行完毕后,解释器将其清出调用栈,继续执行当前执行环境下的剩余的代码。 当分配的调用栈空间被占满时,会引发 堆栈溢出 。 JavaScript 引擎 谷歌的 V8 引擎: 在这里插入代码片 这个引擎主要由两部分组成: 内存堆:这是内存分配发生的地方 调用栈

Spring(三)核心容器 - ApplicationContext 上下文启动准备

点点圈 提交于 2020-02-05 09:07:49
目录 前言 正文 第一步:prepareRefresh 第二步:obtainFreshBeanFactory 第三步:prepareBeanFactory 第四步:postProcessBeanFactory 总结 前言 前面介绍了 Spring 容器的概念,其核心可归纳为两个类: BeanFactory 和 ApplicationContext,ApplicationContext 继承自 BeanFactory ,其不仅包含 BeanFactory 所有功能,还扩展了容器功能。之后介绍了在 SSM 时期和 SpringBoot 时期如何启动 ApplicationContext 。在结尾处,我们指出,ApplicationContext 核心其实是 refresh 方法,容器一系列功能都在该方法中实现,如:注册 Bean、注入 Bean 等。 在 refresh 方法中,实现容器核心功能前,先进行了一系列环境准备工作,我们以 SpringBoot 为当前运行环境,深入讨论这部分内容。 注:本篇文章使用的 SpringBoot 版本为 2.0.3.RELEASE,其 Spring 版本为 5.0.7.RELEASE 正文 refresh 方法定义在 ConfigurableApplicationContext 接口中,被 AbstractApplicationContext