预编译 - Js三部曲
预编译前奏
imply global - 暗示全局变量, window - 全局域
任何变量未经声明即赋值,该变量为全局所有 window
一切声明的 "全局" 变量,归window所有
eg: var a = 10 ==> window.a = 10
window { a : 10 };
预编译 - 四部曲
预编译发生在函数执行的前一刻

创建AO对象 - Activation Object (执行上下文)
AO {
}
寻找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
AO {
a: undefined,
b: undefined
}
将实参值和形参统一
AO {
a: 1,
b: undefined
}
在函数体内找到函数声明,值赋予函数体
AO {
a: function a() {},
b: undefined,
d: function d() {}
}
预编译结束 --> 函数开始执行
AO {
a: function a() {},
b: undefined,
d: function d() {}
}
第一次打印的a为,function a() {}
AO {
a: 123,
b: undefined,
d: function d() {}
}
第二次打印的a为,123
AO {
a: 123,
b: undefined,
d: function d() {}
}
第三次打印的a为,123 ,a函数已预编译过了
AO {
a: 123,
b: function () {},
d: function d() {}
}
打印的b为,function () {}, 即赋值

全局预编译与此相同,但其是生成GO对象,GO === window
注意: var a = b = 1; 此时的b为全局变量,归GO对象所有,AO对象里不存在.
预编译 - Js三部曲的更多相关文章
- js中的预编译
预编译 js执行顺序: 词法/语法分析 预编译 解释执行 js中存在预编译 function demo() { console.log('I am demo'); } demo(); //I am d ...
- JavaScript 预编译(变量提升和函数提升的原理)
本文部分内容转自https://www.cnblogs.com/CBDoctor/p/3745246.html 1.变量提升 console.log(global); // undefined var ...
- JS运行三部曲(预编译)
JS运行的三个步骤: 语法分析 预编译 解释执行 语法分析:通俗来说就是通篇检查你的代码有没有语法错误,有语法错误的话,程序是不会执行的 解释执行:也就是程序读一句执行一句 最重点的也就是预编译了,那 ...
- JS数据类型及函数的预编译
1.JS总体上分为:原始值和引用值 原始值分为:Number.Boolean.String.undefined.null;原始值不可改变的值,存储在栈[stack]的,先进后出! 引用值:array. ...
- JS预编译详解
我们都知道javascript是解释型语言,执行的特点呢是编译一行,执行一行.按照这个思路有时候我们在运行代码时会有一些令人费解的现象出现.下面我们一起来执行下面三段代码. <script> ...
- Rails : css或js文件无法成功预编译或调用jquery类插件时预编译问题
调用bootstrap css框架时,将bootstrap文件夹放入 vendor/assets/下 bootstrap文件结构如下: [shenma@localhost demo]$ ls v ...
- JS的预编译和执行顺序 详析(及全局与局部变量)
最近在复习javascript的事件处理时发现了一个问题,于是总结一下:javascript的预编译和执行顺序的问题: <html> <head> <title> ...
- 关于js预编译以及js文件执行顺序的几个问题。
关于js的执行原理,除去html页面中直接添加的代码,js代码的放置可以分为两类. //情形a <script type="text/javascript" ...
- JS作用域和预编译(转载 学习中。。。)
JS在页面加载过程中顺序执行.但是分块预编译.执行. JS在执行前会进行类似”预编译”的操作,而且先预声明变量再预定义函数. 此时注意,是声明,不是定义,如:var a = 1; 在预编译中,只是执行 ...
随机推荐
- TCP报文结构和长短连接
参考博文: https://www.cnblogs.com/onlysun/p/4520553.html https://blog.csdn.net/zxy987872674/article/deta ...
- 6.Exchanger-交换机
- Spring Boot学习(四)常用注解
一.注解对照表 注解 使用位置 作用 @Controller 类名上方 声明此类是一个SpringMVC Controller 对象,处理http请求 @RequestMapping 类或方 ...
- MySql WorkBench 导入sql文件 中文出现乱码
在workbench中导入sql文件. 查看系统的编码. 导入sql文件时出现了如下警告.但是文件是UTF-8.由于包含中文,使用latin1编码方式会出现乱码. 选择UTF-8,出现错误. 不知道什 ...
- Python-统计序列中元素
问题1: 随机数列[12,5,8,7,8,9,4,8,5,...] 中出现次数最高的3个元素,他们出现的次数 问题2: 对某英文文章的单词,进行词频统计,找出出现次数最搞得10个单词,他们出现的次数是 ...
- Python-为元组中每个元素命名
学生信息系统: (名字,年龄,性别,邮箱地址) 为了减少存储开支,每个学生的信息都以一个元组形式存放 如: ('tom', 18,'male','tom@qq.com' ) ('jom', 18,'m ...
- SFUD+FAL+EasyFlash典型场景需求分析,并记一次实操记录
SFUD+FAL+EasyFlash典型场景需求分析:用整个flash存储数据,上千条数据,读取得时候用easyflash很慢,估计要检索整个flash太慢了. 改进方法:分区检索. 1存数据时,根据 ...
- Layman PHP+JavaScript 实现图片无刷新上传
html文件代码 <!-- ajax文件上传开始 --> <script type="text/javascript" src="/imageuploa ...
- 【字符串算法】AC自动机
国庆后面两天划水,甚至想接着发出咕咕咕的叫声.咳咳咳,这些都不重要!最近学习了一下AC自动机,发现其实远没有想象中的那么难. AC自动机的来历 我知道,很多人在第一次看到这个东西的时侯是非常兴奋的.( ...
- 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句
050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...