1、进入执行上下文

当进入执行上下文(代码执行之前)时,VO里已经包含了下列属性(前面已经说了):

函数的所有形参(如果我们是在函数执行上下文中)

— 由名称和对应值组成的一个变量对象的属性被创建;没有传递对应参数的话,那么由名称和undefined值组成的一种变量对象的属性也将被创建。

所有函数声明(FunctionDeclaration, FD)

—由名称和对应值(函数对象(function-object))组成一个变量对象的属性被创建;如果变量对象已经存在相同名称的属性,则完全替换这个属性。

所有变量声明(var, VariableDeclaration)

— 由名称和对应值(undefined)组成一个变量对象的属性被创建;如果变量名称跟已经声明的形式参数或函数相同,则变量声明不会干扰已经存在的这类属性。

function test(a, b) {  var c = 10;  function d() {}  var e = function _e() {};  (function x() {});}

test(10); // call当进入带有参数10的test函数上下文时,AO表现为如下:
AO(test) = {  a: 10,  b: undefined,  c: undefined,  d: <reference to FunctionDeclaration "d">  e: undefined};

AO里并不包含函数“x”。这是因为“x” 是一个函数表达式(FunctionExpression, 缩写为 FE) 而不是函数声明,函数表达式不会影响VO。
2、执行代码

alert(x); // function

var x = 10;alert(x); // 10

x = 20;

function x() {};

alert(x); // 20为什么第一个alert “x” 的返回值是function,而且它还是在“x” 声明之前访问的“x” 的?为什么不是10或20呢?因为,根据规范函数声明是在当进入上下文时填入的; 同意周期,在进入上下文的时候还有一个变量声明“x”,那么正如我们在上一个阶段所说,变量声明在顺序上跟在函数声明和形式参数声明之后,而且在这个进入上下文阶段,变量声明不会干扰VO中已经存在的同名函数声明或形式参数声明,因此,在进入上下文时,VO的结构如下
VO = {};

VO['x'] = <reference to FunctionDeclaration "x">

// 找到var x = 10;// 如果function "x"没有已经声明的话// 这时候"x"的值应该是undefined// 但是这个case里变量声明没有影响同名的function的值

VO['x'] = <the value is not disturbed, still function>

转载于:https://www.cnblogs.com/ftxc/p/8404969.html

js处理上下文代码的2个阶段相关推荐

  1. 以及其任何超类对此上下文都是未知的_浏览器原理系列 - JS执行上下文详解(一):作用域

    本文主要介绍JS执行上下文相关的内容,理解了JavaScript的执行上下文才能更好地理解JavaScript语言本身以及该语言一些特性,如变量提升.作用域和闭包. 一.作用域 1.1 作用域 作用域 ...

  2. js 获取上下文后面的路径_通过在数据后面显示上下文来可视化公众意见

    js 获取上下文后面的路径 In 1824, The Harrisburg Pennsylvanian, a newspaper from a town in Pennsylvania conduct ...

  3. js获取html代码中所有图片地址

    /** * JS获取html代码中所有的图片地址 * @param htmlstr * @returns imgsrcArr 数组 */ function getimgsrc(htmlstr) { v ...

  4. html漂浮广告随页面移动代码,JS漂浮广告代码,慢慢漂移的广告JS代码

    JS漂浮广告代码,慢慢漂移的广告js代码,可以漂浮到任何位置,哈哈...直接贴代码,很简单. var xin = true, yin = true var step = 1 var delay = 5 ...

  5. JS学习笔记 - 代码复用

    本文章记录本人在学习 JavaScript 中看书理解到的一些东西,加深记忆和并且整理记录下来,方便之后的复习. js 中复用代码 说道代码复用,一般都会涉及到对象继承.在js中有许多可以选择的继承方 ...

  6. 如何在页面调用JS函数的代码

    如何在页面调用JS函数的代码 这个所有的人都不能回复啊,只有一个人可以的,晕!我第一次发现JS的功能有"打下来",呵呵! 言归正传: 下面是一个很简单的例子: 首先写一个JS函数, ...

  7. js引擎执行代码的基本流程

    js引擎执行代码的基本流程 先执行初始化代码: 包含一些特别的代码 设置定时器 绑定监听 发送ajax请求 后面在某个时刻才会执行回调代码

  8. js里面拼接代码和使用ModelAndView

    js里面拼接代码和使用ModelAndView 1.js里面拼接代码 <tr><td class="tdTitle">性别</td><td ...

  9. nuxt.js的核心代码_Nuxt.js中的通用应用程序代码结构

    nuxt.js的核心代码 by Krutie Patel 通过克鲁蒂·帕特尔(Krutie Patel) Nuxt.js中的通用应用程序代码结构 (Universal application code ...

最新文章

  1. poj 3281 Dining 最大流
  2. 特征工程之MinMaxScaler、StandardScaler、Normalizer、Binarizer
  3. 学习笔记 ACCESS 延迟注入
  4. 洛谷1850(NOIp2016) 换教室——期望dp
  5. springcloud(七):配置中心svn示例和refresh
  6. redis-rdb-tool 工具介绍
  7. SDK location not found. Define location with an ANDROID_SDK_ROOT environment variable or by setting
  8. 【线上分享】基于人眼主观视觉的画质评价与提升
  9. C语言实现两个数值互换
  10. Bugku 杂项刷题日常1--21:
  11. CCNA11月20日战报
  12. java获取汉字首字母
  13. js 正则表达式 判断车牌号
  14. 自制typora主题
  15. Ubuntu 18.04下为Firefox浏览器安装flash插件
  16. android获取指纹信息最新,# android 指纹识别并检测指纹库是否变更
  17. ESP8266 NodeMCU Web 服务器:在仪表盘中显示传感器读数
  18. 最强朋友圈展示面配文
  19. 电路基本原理那些事儿番外篇 电压
  20. 逆战---vue的总结

热门文章

  1. 代码整洁之道,clean code
  2. prefix.pch文件的一些简单使用
  3. ylbtech-LanguageSamples-Porperties(属性)
  4. strerror和perror函数详解
  5. C# 小闹钟 v3.0
  6. 3.1 读入一个参数
  7. Java多线程并发学习-进阶大纲
  8. 报错型sql注入原理分析
  9. TCP/IP TELNET SSH
  10. 深入了解tcmalloc(一):windows环境下无缝拦截技术初探