javascript预编译(执行期的上下文)
时间:2022-07-25
本文章向大家介绍javascript预编译(执行期的上下文),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
JavaScript预编译(执行期上下文)总结
上代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
function test(a,b){
console.log(a);
var a = 'demo';
console.log(a);
function a(){}
console.log(a);
var a = function (){}
console.log(a);
console.log(b)
var b = 1;
}
test(1);
</script>
</body>
</html>
执行结果:
预编译(‘执行期上下文’)
预编译发生在函数执行之前
。
这句话很重要,函数执行之前也就是在这段程序开始之前,浏览器对马上要执行的函数进行预编译!! 预编译四部曲
- 创建AO对象
- 找形参和变量声明,将变量和形参作为AO属性名,值为undefined
- 将实参和形参相统一
- 在函数体里找到函数声明,值赋予函数体
- 最后程序输出变量值的时候,就是从AO对象中拿。
以上一个问题为例。以下过程都是在系统内部完成的
1、创建AO对象
var AO = {
}
2、找形参和变量声明,将变量和形参作为AO属性名,值为undefined
这里的形参首先出现的是a,b。变量为a,b。
var AO = {
a = undefined;
b = undefined;
}
3、将实参和形参相统一
这里的实参只有一个是1。
var AO = {
a =1;
b = undefined;
}
4、在函数体里找到函数声明,值赋予函数体
这里只有第十三行是函数声明,第十五行不是。
var AO = {
a = function a(){};
b = undefined;
}
5、系统执行程序(解释一行执行一行)
- console.log(a),输出a。这是输出的值为function a(){};
- var a = ‘demo’ 其实就是a = ‘demo’。因为var a已经在预编译中ok了。AO中的a的值变为’demo’;
- console.log(a) ,这时候输出的就是 demo;
- function a(){} 在预编译中已经用过了就不用了。
- console.log(a) , 输出 demo ;
- var a = function (){} AO中的a的值变为function (){};
- console.log(a),输出 function (){};
- console.log(b) b中的值一直未undefined ;输出 undefined;
- var b = 1; 将AO对象中的b的值变为1;
这样就完美解释了代码是怎样的执行循序
- 点双连通分量与割点
- 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐
- 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏
- 1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富
- 2463: [中山市选2009]谁能赢呢?
- 2748: [HAOI2012]音量调节
- 2697: 特技飞行
- 我这么玩Web Api(二)
- 1296: [SCOI2009]粉刷匠
- 1293: [SCOI2009]生日礼物
- 记一次线程池调优经历
- JavaScript对象
- 1088: [SCOI2005]扫雷Mine
- 1029: [JSOI2007]建筑抢修
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Ubuntu 16.04/18.04 安装Pycharm及Ipython的教程
- linux系统对外开放3306、8080等端口,防火墙设置详解
- Linux中selinux基础配置教程详解
- Linux中如何查看已挂载的文件系统类型详解
- 在 Linux 命令行中使用 tcpdump 抓包的一些功能
- CentOS平台快速搭建LAMP环境的方法
- Linux系统中时间的获取和使用
- 基于Linux搭建Apache网站服务配置详解
- CentOs下手动升级node版本的方法
- 详述Linux中Firewalld高级配置的使用
- CentOS7安装PHP7 Redis扩展的方法步骤
- centos7下rsync+crontab定期同步备份
- 你可能不知道的一些linux文件权限管理方法
- 原来SqlSession只是个甩手掌柜?真正干活的是谁?
- Linux下的定时任务和延时任务的详解