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;
这样就完美解释了代码是怎样的执行循序
- 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 数组属性和方法
- Laravel 修改默认日志文件名称和位置的例子
- php 命名空间(namespace)原理与用法实例小结
- Laravel Eloquent ORM 实现查询表中指定的字段
- Yii框架 session 数据库存储操作方法示例
- 使用laravel指定日志文件记录任意日志
- php实现微信小程序授权登录功能(实现流程)
- PHP封装请求类实例分析【基于Yii框架】
- php 多继承的几种常见实现方法示例
- PHP中通过getopt解析GNU C风格命令行选项
- laravel高级的Join语法详解以及使用Join多个条件
- laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
- 使用laravel的Eloquent模型如何获取数据库的指定列
- php 使用 __call实现重载功能示例
- laravel excel 上传文件保存到本地服务器功能
- PHP用swoole+websocket和redis实现web一对一聊天