js处理上下文代码的2个阶段

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

deep learning入门学习

根据知乎的一些大牛的回答总结出的deep learning入门学习的一些material&#xff1a; BE NOTED THAT SOME VIDEOS ARE ON YOUTUBE! I BELIEVE THAT YOU KNOW HOW TO ACESS THEM. 1. Andrew Ng的机器学习前四章的内容(线性回归与逻辑回归) http://open.163.com/special/opencour…

QTP基础学习(二)启动与设置

1、启动QTP选择要求的Add-in 默认带有3个Add-in&#xff0c;之后可以安装其他的Add-in&#xff0c;如.net的Add-in 2、设置QTP的选项 点击Tools-Options&#xff0c;弹出如下框&#xff1a; 3、建立记录和运行设置 点击Automatic-Record and Run Settings&#xff0c;如下图&am…

王道操作系统考研笔记——2.3.3 进程互斥的硬件实现方法

文章目录2.3.3 进程互斥的硬件实现方法2.3.3.1 中断屏蔽方法2.3.3.2 TestAndSet指令2.3.3.3 Swap指令2.3.3.4 小结2.3.3 进程互斥的硬件实现方法 知识总览 2.3.3.1 中断屏蔽方法 利用开/关中断指令实现中断屏蔽方法&#xff0c;可以使得某进程开始访问临界区到结束期间不允许…

Python Web框架Tornado的异步处理代码演示样例

1. What is Tornado Tornado是一个轻量级但高性能的Python web框架&#xff0c;与还有一个流行的Python web框架Django相比。tornado不提供操作数据库的ORM接口及严格的MVC开发模式&#xff0c;但能够提供主要的web server功能。故它是轻量级的&#xff1b;它借助non-blocking …

Linux基础--MBR/GPT与parted

关于MBR和GPT这两种分区表&#xff0c;wiki上讲的很清楚。不过有些同学可能看不了&#xff0c;你需要先了解科学上网。这里我就只把它们的结构图贴上&#xff0c;简要说明了。https://zh.wikipedia.org/wiki/%E4%B8%BB%E5%BC%95%E5%AF%BC%E8%AE%B0%E5%BD%95https://zh.wikipedi…

MYSQL的空间查询(转帖)

SELECT x(location),y(location) FROM frddata.points; 本文将向各位介绍如何使用MySql5.x中的空间数据库&#xff0c;并展示一下它高效的性能&#xff08;前提是正确使用&#xff09;。 本文适合于对SQL和MYSQL熟悉的人员。 步骤1&#xff1a;创建支持空间查询的表 首先来说一…

数据库杂谈(五)——关系数据库语言

文章目录5 关系数据库语言5.1 MySQL简介5.1.1 MySQL的发展历史5.1.2 数据库的用户接口5.1.3 SQL及其概念辨析5.1.4 SQL查询语言的分类5.2 入手5.2.1 回顾——基本和虚表5.2.2 数据准备5.2.3 常用命令5.2.4 导入数据5.2.5 简单的查询5.2.6 条件查询5.2.6.1 条件查询格式5.6.2.1 …

ansible---基础

ansible特点&#xff1a;不需要安装客户端&#xff0c;通过sshd去通信基于模块工作&#xff0c;模块可以由任何语言开发不仅支持命令行使用模块&#xff0c;也支持编写yaml格式的playbook支持sudo安装&#xff1a;yum install -y epel-releaseyum install -y ansible 配置文件&…

Suse 12 安装VMware tool

cd /run/media/root /VMware Tools 查看光盘目录mdkir tool chmod -R 777 /tool 赋予文件夹权限cp -rf /run/media/root /VMware Tools /toolcd /tooltar -zxvf VMwareTools-9.10.0-2476743.tar.gz cd vmware-tools-distrib/ ./vmware-install.pl 执行安装 转载于:https:…

css斜角覆盖阴影

Demo下载 效果如图&#xff1a; css&#xff1a; #box { width: 280px; height: 150px; background: #ff6565; padding: 20px; position: relative; overflow: hidden; } #content { width: 280px; height: 15…

Django 模型与 Mysql 数据类型对应

Django 1.11.9 文件路径&#xff1a;site-packages\django\db\backends\mysql\base.py–class DatabaseWrapper _data_types { ‘AutoField’: ‘integer AUTO_INCREMENT’, ‘BigAutoField’: ‘bigint AUTO_INCREMENT’, ‘BinaryField’: ‘longblob’, ‘BooleanFiel…

王道操作系统考研笔记——2.3.4 信号量机制

文章目录2.3.4 信号量机制2.3.4.1 引入2.3.4.2 整型信号量2.3.4.3 记录型信号量2.3.4.4 小结2.3.4 信号量机制 知识总览 在1965年&#xff0c;荷兰学着Dijkstra提出了一种卓有成效的实现进程互斥、同步的方法——信号量机制。 2.3.4.1 引入 用户进程可以通过使用操作系统提供…

QT分析之WebKit

该文章整理自 网易博客 http://blog.163.com/net_worm/blog/static/12770241920101831312381/ 转载请注明出处 WebKit是QT4新整合的第三方构件。按照惯例动手分析之前&#xff0c;先了解大概 WebKit由三个模块组成&#xff1a;JavaScriptCore、WebCore 和 WebKit WebKit作为了整…

ViewPager循环

android.support.v4.view.ViewPager ViewPager的使用跟AbsListView&#xff0c;AbsSpinner类似&#xff0c;需要用一个adapter填充数据&#xff0c;同时实现了onPagerChangeListener接口。 ViewPager需要的adapter继承自android.support.v4.view.PageAdapter,getCount返回adapt…

angularjs学习笔记—工具方法

1.angular.bind(self, fn, args) 作用&#xff1a;返回一个新的函数&#xff0c;绑定这个函数的this指向self 参数&#xff1a;self&#xff1a;新函数的上下文对象 fn&#xff1a;需要绑定的函数 args&#xff1a;传递给函数的参数 返回值&#xff1a;this指向self的新函数 …

SpringMVC配置项学习笔记

1. <mvc:annotation-driven /> <mvc:annotation-driven />是一种简写形式&#xff0c;默认会注册DefaultAnnotationHandlerMapping和DefaultAnnotationHandlerAdapt两个bean&#xff0c;是spring mvc为Controller分发请求所必须的&#xff0c;它还提供了NumberForm…

MIT算法导论(一)——算法分析和引论

文章目录1 算法分析及引论1.1 算法1.2 排序1.2.1 插入排序1.2.1.1 插入排序原理1.2.1.2 时间复杂度1.2.1.3 渐进时间复杂度1.2.1.4 回到算法1.2.2 归并排序1.2.2.1 归并排序原理1.2.2.2 归并排序时间复杂度1 算法分析及引论 1.1 算法 算法是一门关注性能的学科&#xff0c;也…

使用Apache Tomcat Maven插件部署运行 Web 项目

2019独角兽企业重金招聘Python工程师标准>>> 什么是Apache Tomcat Maven Plugin&#xff1f; Maven Plugin 是Apache Tomcat 提供的一个Maven插件&#xff0c;它可以在你没有tomcat容器时将任何一个war项目文件部署在该插件上提供访问。 为什么要用Apache Tomcat Ma…

POJ2104 (平方分割)二分查找理解。

题意&#xff1a;任意区间求第k大数 思路&#xff1a; 预处理&#xff1a;利用平方分割&#xff08;分桶法&#xff09;把区间切割成B sqrt(n)大小的一块块&#xff0c;然后每个各自排序。 二分第k大数x&#xff0c;接着就需要求[l,r]区间中x的排名&#xff0c;与k比较&#x…

每日一题——leetcode237 删除链表中的结点

1 题目 237. 删除链表中的节点 难度简单 请编写一个函数&#xff0c;用于 删除单链表中某个特定节点 。在设计函数时需要注意&#xff0c;你无法访问链表的头节点 head &#xff0c;只能直接访问 要被删除的节点 。 题目数据保证需要删除的节点 不是末尾节点 。 示例 1&am…