js中的的GO和AO
AO
- 创建AO(Activation Object)对象,又叫执行期上下文;
- 寻找形参和变量声明作为AO的属性名,并赋值为undefined;
- 传入实参的值;
- 在函数体内寻找函数声明,放入作为AO的属性,并赋值为其函数体。
GO
- 创建GO(Global Object)对象;
- 寻找变量声明作为GO的属性名,并赋值为undefined;
- 寻找函数声明,放入作为GO的属性,并赋值为其函数体。
相关的代码输出题目1 [AO]
function test(a, b) {console.log(a); // function a(){return 'a'}var c = 123;console.log(c); // 123function a() {return 'a';}console.log(b); // 2var b = function c() {return 'b';}console.log(b); // function a(){return 'b'}
}
test(1, 2);// 创建一个AO对象(activation object),AO{}
// 寻找形式参数和变量声明作为AO的属性名,并赋值为undefined
AO {a: undefined,b: undefined,c: undefined
}
// 传入实参的值
AO {a: 1,b: 2,c: undefined
}
// 在函数体内寻找函数声明,放入作为AO的属性,并赋值为其函数体
AO {a: function(){return 'a'},b: 2,c: undefined
}
//执行过程
a输出AO中的结果
c被赋值为123
b未被重新赋值,为AO中的值
b被重新复制为函数
相关的代码输出题目2
function Foo() {getName = function() {console.log(1);}return this;}Foo.getName = function () {console.log(2);}Foo.prototype.getName = function () {console.log(3);}// 给全局变量赋值一个匿名函数var getName = function() {console.log(4);}// 函数声明function getName() {console.log(5);}// 1. 调用Foo函数上的静态方法Foo.getName(); // 2/** 2. 直接调用getName函数* GO{* getName: undefined => 初始化时,var的变量提升* getName: function(){console.log(5)} => function有变量提升* getName: function(){console.log(4)} => 变量的赋值行为* }* */getName(); // 4/** 3. 直接调用构造函数Foo, this指向window* 函数内部的getName没有使用var,let,const声明,则该变量为全局变量,且发生了重新赋值行为* getName: function(){console.log(1)}* */Foo().getName() // 1// 4. window.getName() => 1 (GO内getName()输出1)getName() // 1// 5. new (Foo.getName()) => 将Foo.getName()作为构造函数// 作为普通函数 this指向调用者,作为构造函数 this指向实例对象// 输出2 是在执行构造函数过程中的一个输出new Foo.getName() // 2// 6. 先执行new Foo()创建实例对象,调用实例对象身上的getName方法 => 自身实例对象没有,去原型链上寻找new Foo().getName() // 3// 7. 综合上边的5,6 => 把6作为构造函数new new Foo().getName() // 3
js中的的GO和AO相关推荐
- JS中的预编译(AO、GO详解)
文章目录 一.由实例引发的思考 二.全局上下文GO: 三.函数上下文AO: 四.全局上下文GO+函数上下文AO: 总结 执行js文件的流程: ①通篇检查语法错误 ②预编译 ③解释一行执行一行 一.由实 ...
- js中的arguments
arguments是JavaScript里的一个内置对象,是指向实参对象的引用,它很古怪,也经常被人所忽视,但实际上是很重要的.所有主要的js函数库都利用了arguments对象,所以agrument ...
- 在js中使用HashMap数据结构,在js中使用K,V数据结构
首先是定义一个HashMap方法,做基类(复制在js中即可,然后引用) //简单的哈希表,begin function HashMap() {/** Map 大小 * */var size = 0;/ ...
- [JavaScript] 探索JS中的函数秘密
函数长啥样? 把一些要重复使用的内容封装到函数内. function foo(title) {console.log(title) } foo('title') foo('dust') foo('he ...
- 在node.js中,使用基于ORM架构的Sequelize,操作mysql数据库之增删改查
Sequelize是一个基于promise的关系型数据库ORM框架,这个库完全采用JavaScript开发并且能够用在Node.JS环境中,易于使用,支持多SQL方言(dialect),.它当前支持M ...
- 在JS中最常看到切最容易迷惑的语法(转)
发现一篇JS中比较容易迷惑的语法的解释,挺有用的,转载下,与大家分享: js中大括号有四种语义作用 语义1,组织复合语句,这是最常见的 Js代码 if( condition ) { //... }e ...
- js去el的map_转:el表达式获取map对象的内容 js中使用el表达式 js 中使用jstl 实现 session.removeattribute...
原文链接: 总结: el表达式获取map对象的内容 后端: HashMap map1 = new HashMap(); map1.put("key1","lzsb&quo ...
- js中substr,substring,indexOf,lastIndexOf的用法
js中substr,substring,indexOf,lastIndexOf等的用法 1.substr substr(start,length)表示从start位置开始,截取length长度的字符串 ...
- js中的各种宽高以及位置总结
在javascript中操作dom节点让其运动的时候,常常会涉及到各种宽高以及位置坐标等概念,如果不能很好地理解这些属性所代表的意义,就不能理解js的运动原理,同时,由于这些属性概念较多,加上浏览器之 ...
最新文章
- (69)番外 —— 编写一个简易的反调试引擎
- html中两个冒号,css中双冒号和单冒号区别
- 计算机图形学与相关学科的关系,哈尔滨工业2015博士招生计算机图形学与人机交互设计大纲...
- 计算机事业单位专技岗考什么区别,事业单位管理岗和专技岗的区别(从待遇等角度)...
- CF204E-Little Elephant and Strings【广义SAM,线段树合并】
- 第62课 捉迷藏 《小学生C++趣味编程》
- 泛型集合 有序泛型 c#
- node.js读写文件
- 精选PHP毕业设计12套——源码+论文完整资源
- 记录用HDFview和Panoply软件打开nc文件
- [激光器原理与应用-10]:激光器分类
- 小说网站服务器架构图,搭建小说网站用什么程序?搭建小说网站图文教程_好特教程...
- 手写jQuery轮播图插件,即拿即用,更多接口,更少代码实现你想要的轮播图~~
- Maven 阿里云配置 此 MAVEN 配置地表最强不接受反驳
- 终于等来了十一长假,当然要戴上你去这些美到哭的地方
- jvm 内存模型结构
- 黑马瑞吉外卖之移动端验证码登录使用qq邮箱
- EPLAN新建项目图纸
- C++中为二维数组开辟空间,并释放空间
- 基于YOLO的谱面识别与检索【Python环境实现】
热门文章
- 根据输入的半径值,计算球的体积。
- win10如何打开摄像头_干货|如何优雅的打开你的win10电脑
- 计算机网络-IP地址计算专题(非常重要)
- 局域网LanQQ聊天项目
- 四极管 整理wince挂起和唤醒(suspend/wakeup)以及实现关机功能文章
- 机器学习(二)--sklearn之逻辑斯蒂回归和朴素贝叶斯
- Nginx输出header到access日志文件
- 电脑快捷键操作以及常用知识大全
- Word排版:页眉不能对应每章标题、页脚偶数页消失等问题
- 构建基于docker的airflow并访问有kerberos认证的cdh集群