上下文

JavaScript深入之变量对象

南笙酒味 提交于 2019-11-28 01:27:39
前言 在上篇《javascript深入之执行上下文栈》中讲到,当javascript代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。 对于每个执行上下文,都有三个重要属性: 变量对象(variable object, VO) 作用域链(scope chain) this 今天重点讲讲创建变量对象的过程。 变量对象 变量对象是与执行上下文相关的数据作用域,存储了在上下文中定义的变量和函数声明。 因为不同执行上下文下的变量对象稍有不同,所以我们聊聊全局上下文下的变量对象和函数上下文下的变量对象。 全局上下文 我们先了解一个概念,叫全局对象。在w3c中也有介绍: 全局对象是预定义的对象,作为javscript的全局函数和全局属性的占位符。通过使用全局对象,可以访问所有其他预定义的对象,函数和属性。 在顶层 javascript 代码中,可以用关键字this 引用全局对象。 因为全局对象是作用域链的头,这意味着所有非限定性的变量和函数名都回作为该对象的属性来查询。 例如,当javascript代码引用parseInt()函数时,它引用的是全局对象的parseInt属性,全局对象是作用域链的头,还意味着在顶层javascript代码中声明的所有变量都将成为全局对象的属性。 如果看的不是很懂的话,容我再来介绍下全局对象:

javascript 之变量对象-09

不问归期 提交于 2019-11-28 01:27:23
变量对象 在《javascript 之执行环境-08》文中说到,当JavaScript代码执行一段可执行代码时,会创建对应的执行上下文(execution context)。对于每个执行上下文,都有三个重要属性: 变量对象(Variable object,VO) 作用域链(Scope chain) this 每个执行环境(执行上下文)都有一个对应的变量对象(variable object),环境中形参、函数、定义的所有变量都保存在变量对象中。 创建变量对象过程 因创建执行环境分为两个阶段,所以变量对象也分两个阶段来分析: 初始化(当函数被调用,未执行代码之前) 代码执行阶段(开始执行代码) 初始化 VO包括: 1、根据函数的参数, 创建并初始化arguments object,值为默认值 undefined 2、扫描该执行上下文中的函数声明(不包括函数表达式) a) 找到所有的function 声明, 将函数名当做属性创建,值为函数定义 b) 在扫描过程中如果存在重名的函数声明,那么后面的会覆盖前面的声明,函数声明与变量声明有冲突时,会忽略(以函数声明为主) 3、 扫描该执行上下文中的var变量声明 a) 找到所有的变量声明, 将变量名当做属性创建,值初始为undefined b) 在扫描过程中如果存在重名的变量声明以及重名的函数声明,会忽略; 如下代码: 1 function

JavaScript深入之变量对象

℡╲_俬逩灬. 提交于 2019-11-28 01:27:09
在JavaScript代码执行一段可执行的代码(executable code)时,都会创建执行上下文(execution context) 对于每个执行上下文,都有三个重要属性: 变量对象(Variable object,VO) 作用域链(Scope chain) this 变量对象 变量对象是与执行上下文相关的 数据作用域 ,储存了在上下文中定义的变量和函数声明 因为不同执行上下文下的变量对象稍不同,今天主要要说的就是 全局上下文下的变量 和 函数上下文下的变量对象 全局上下文 w3shool上是怎么定义的: 全局对象是预定义的对象,作为 JavaScript 的全局函数和全局属性的占位符。通过使用全局对象,可以访问所有其他所有预定义的对象、函数和属性。 在顶层 JavaScript 代码中,可以用关键字 this 引用全局对象。因为全局对象是作用域链的头,这意味着所有非限定性的变量和函数名都会作为该对象的属性来查询。 例如,当JavaScript 代码引用 parseInt() 函数时,它引用的是全局对象的 parseInt 属性。全局对象是作用域链的头,还意味着在顶层 JavaScript 代码中声明的所有变量都将成为全局对象的属性。 1.可以通过 this 引用,在客户端 JavaScript 中,全局对象就是 Window 对象。 console.log(this);

变量对象

若如初见. 提交于 2019-11-28 01:26:47
在上篇 《JavaScript深入之执行上下文栈》 中讲到,当 JavaScript 代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。 对于每个执行上下文,都有三个重要属性: 变量对象(Variable object,VO) 作用域链(Scope chain) this 今天重点讲讲创建变量对象的过程。 变量对象 变量对象是与执行上下文相关的数据作用域,存储了在上下文中定义的变量和函数声明。 因为不同执行上下文下的变量对象稍有不同,所以我们来聊聊全局上下文下的变量对象和函数上下文下的变量对象。 全局上下文 我们先了解一个概念,叫全局对象。在 W3School 中也有介绍: 全局对象是预定义的对象,作为 JavaScript 的全局函数和全局属性的占位符。通过使用全局对象,可以访问所有其他所有预定义的对象、函数和属性。 在顶层 JavaScript 代码中,可以用关键字 this 引用全局对象。因为全局对象是作用域链的头,这意味着所有非限定性的变量和函数名都会作为该对象的属性来查询。 例如,当JavaScript 代码引用 parseInt() 函数时,它引用的是全局对象的 parseInt 属性。全局对象是作用域链的头,还意味着在顶层 JavaScript 代码中声明的所有变量都将成为全局对象的属性。

Linux性能优化从入门到实战:03 CPU篇:CPU上下文切换

ぃ、小莉子 提交于 2019-11-28 01:25:40
  linux操作系统是将CPU轮流分配给任务,分时执行的。而每次执行任务时,CPU需要知道 CPU寄存器 (CPU内置的内存)和 程序计数器PC (CPU正在执行指令和下一条指令的位置)值,这些值是CPU执行任务所依赖的环境,也就是 CPU上下文 。    CPU上下文切换 ,就是把前一个任务的CPU上下文(CPU寄存器和程序计数器)保存起来,然后加载入新任务的上下文到CPU寄存器和程序计数器中,最后跳转到程序计数器所指的位置,运行新任务。   保存下来的上下文会在系统内核中,并在任务重新调度执行时再次加载进来,让任务看起来是连续执行的。   根据任务的不同,CPU上下文切换分为进程上下文切换、线程上下文切换、中断上下文切换。       进程上下文切换   Linux把进程的运行空间分为内核空间和用户空间,并对进程按照 特权等级 划分,从内核空间Ring 0至用户空间Ring 3:Ring 0具有最高权限,可以直接访问所有资源;Ring 3只能访问受限资源,不能直接访问内存等硬件设备,需要通过 系统调用 陷入到内核中,才能访问这些特权资源。      进程运行在用户空间为进程的用户态,陷入内核空间为进程的内核态。从用户态到内核态的转变,需要通过系统调用来完成,期间涉及CPU上下文的切换:先保存原来用户态指令位置,然后更新内核态指令新位置,最后执行内核态代码;系统调用结束后

3执行上下文栈

安稳与你 提交于 2019-11-28 01:25:06
执行上下文对象什么时候产生?函数调用的时候产生 1.在全局代码执行前,js引擎就会创建一个栈来存储管理所有的执行上下文对象 2.在全局执行上下文(window)确定后,将其添加到栈中(压栈) 3.在函数执行上下文 创建 后,将其添加到栈中(压栈) 4.在当前函数执行完后,将栈顶的对象移除(出栈) 5.当所有的代码执行完后,栈中只剩下window 函数定义的时候不产生函数上下文对象,只有在执行前1秒才创建函数上下文对象,也就是, 不调用函数的话是不会产生函数执行上下文对象的 变量提升和函数声明提升是执行上下文和执行上下文栈这个技术的结果---》预处理(收集数据) 必须用var 定义的变量才会收集 1.创建执行上下文 2.预处理(收集数据) //形参要赋值 arguments要赋值 <script type="text/javascript"> var a = 10 var bar = function (x) { var b = 5 foo(x + b) } var foo = function (y) { var c = 5 console.log(a + c + y) } bar(10) // bar(10) </script> 来源: https://www.cnblogs.com/lucy-xyy/p/11708384.html

JavaScript深入之执行上下文栈

北城以北 提交于 2019-11-28 01:24:53
如果要问到 javascript 代码执行顺序的话,想必写过javascript的开发者都会有个直观的印象,那就是顺序执行,例如: var foo = function(){ console.log('foo1') } foo() // foo1 var foo function(){ console.log('foo2') } foo() // foo2 然而去看这段代码: function foo(){ console.log('foo1'); } foo() // foo2 function foo(){ console.log('foo2') } foo() // foo2 打印的结果却是两个 foo2 刷过面试题的都知道这是因为javascript引擎并非一行一行的分析和执行程序,而是一段一段的分析执行。 当执行一段代码的时候,会进行一个“准备工作”,比如第一个例子中的变量提升,和第二个例子中的函数提升。 但是本文真正想让大家思考的是: 这个 “一段一段” 中的 “段” 究竟是怎么划分的呢? 到底 javascript 引擎遇到一段怎样的代码时才会做“准备工作”呢? 可执行代码 这就要说到 javascript 的可执行代码(executable code)的类型有哪些了? 其实很简单,就三种,全局代码,函数代码,eval代码。 举个例子,当执行到一个函数的时候

JavaScript执行上下文

孤街醉人 提交于 2019-11-28 01:24:37
一直一来,对JavaScript的代码执行顺序,大部分人都会认为 顺序执行 var foo = function () { console.log('foo1'); } foo(); // foo1 var foo = function () { console.log('foo2'); } foo(); // foo2 这里看起来似乎都很合理,但是 没有想象的那么简单 在看这一段代码 function foo() { console.log('foo1'); } foo(); function foo() { console.log('foo2'); } foo(); 两次都会打印出foo2 这里涉及到两个问题 变量提升(之前写过) 函数提升 JavaScript引擎并不是一行一行分析 执行程序 而是一段一段的执行 ,当执行一段代码的时候,会进行一个“准备工作”,变量提升 函数提升 就是准备工作 这一段一段JavaScript是怎么划分的? 可执行代码 这就要说到 JavaScript 的可执行代码(executable code)的类型有哪些了? 就三种,全局代码、函数代码、eval代码(转义字符串为对象)。 举个例子,当执行到一个函数的时候,就会进行准备工作,这里的“准备工作”, 让我们用个更专业一点的说法,就叫做"执行上下文(execution context)"。

js 难点之执行上下文栈理解

好久不见. 提交于 2019-11-28 01:24:28
顺序执行? 如果要问到 JavaScript 代码执行顺序的话,想必写过 JavaScript 的开发者都会有个直观的印象,那就是顺序执行,毕竟: var foo = function () { console.log('foo1'); } foo(); // foo1 var foo = function () { console.log('foo2'); } foo(); // foo2 然而去看这段代码: function foo() { console.log('foo1'); } foo(); // foo2 function foo() { console.log('foo2'); } foo(); // foo2 打印的结果却是两个 foo2 。 刷过面试题的都知道这是因为 JavaScript 引擎并非一行一行地分析和执行程序,而是一段一段地分析执行。当执行一段代码的时候,会进行一个“准备工作”,比如第一个例子中的变量提升,和第二个例子中的函数提升。 但是本文真正想让大家思考的是:这个“一段一段”中的“段”究竟是怎么划分的呢? 到底JavaScript引擎遇到一段怎样的代码时才会做“准备工作”呢? 可执行代码 这就要说到 JavaScript 的可执行代码(executable code)的类型有哪些了? 其实很简单,就三种,全局代码、函数代码、eval代码。

执行上下文栈

泄露秘密 提交于 2019-11-28 01:24:19
顺序执行? 如果要问到 JavaScript 代码执行顺序的话,想必写过 JavaScript 的开发者都会有个直观的印象,那就是顺序执行,毕竟: var foo = function () { console.log('foo1'); } foo(); // foo1 var foo = function () { console.log('foo2'); } foo(); // foo2 然而去看这段代码: function foo() { console.log('foo1'); } foo(); // foo2 function foo() { console.log('foo2'); } foo(); // foo2 打印的结果却是两个 foo2 。 刷过面试题的都知道这是因为 JavaScript 引擎并非一行一行地分析和执行程序,而是一段一段地分析执行。当执行一段代码的时候,会进行一个“准备工作”,比如第一个例子中的变量提升,和第二个例子中的函数提升。 但是本文真正想让大家思考的是:这个“一段一段”中的“段”究竟是怎么划分的呢? 到底JavaScript引擎遇到一段怎样的代码时才会做“准备工作”呢? 可执行代码 这就要说到 JavaScript 的可执行代码(executable code)的类型有哪些了? 其实很简单,就三种,全局代码、函数代码、eval代码。