网站首页 > 网络编程 > javascript 正文
浏览器是如何解析JavaScript的?本篇文章就来带大家认识浏览器解析JavaScript的原理,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。【推荐视频教程:JavaScript视频教程】
浏览器解析JavaScript原理特点:
1、跨平台
2、弱类型 javascript 定义的时候不需要定义数据类型,数据类型是根据变量值来确定的.
var a = 10; //数字类型
var a = true //boolean类型
( 强类型: 定义变量的时候需要定义变量的类型:例如java,C#中的int a = 10 boolean a = true,直接确定了数据类型)
3、解释执行,逐行执行
javascript 执行过程
1、语法检测
就是看你有没有基本的语法错误,例如中文,关键字错误...
2、词法分析(预编译)
3、逐行执行
词法分析
预编译的过程(两种情况)
1、全局(直接是script标签中的代码,不包括函数执行)
以下面demo为例:
console.log(a); console.log(b)
var a = 100;
console.log(a) var b = 200 var c = 300 function a(){
} function fun(){
}
执行前:
1)、 首先生成一个GO(global object)对象,看不到,但是可以模拟出来用来分析
GO = { //自带的属性都不写
}
2) 、分析变量声明,变量名为属性名,值为undefined
GO = {
a : undefined,
b : undefined,
c : undefined
}
3)、分析函数声明,函数名为属性名,值为函数体,如果函数名和变量名相同,则无情覆盖
GO = {
a : function a(){
},
b : undefined,
c : undefined,
fun : function fun(){
}
}
此时,GO就是预编译完成的最终对象,词法分析结束。
4)、 逐行执行,分析过(变量声明,函数声明)不用管了,只管赋值(变量赋值)
a赋了一次值,值改变为100
GO = {
a : 100,
b : undefined,
c : undefined,
fun : function fun(){
}
}
2、局部( 函数执行的时候)
以这个demo为例:
num = 100510)
1)、预编译的时候
GO = {
num : undefined,
fun : function
}
2)、执行过程
GO = {
num : 100,
fun : function
}
3)、函数调用,也是会生成自己的作用域(AO:active object),AO活动对象. 函数调用时候,执行前的一瞬间产生的,如果有多个函数的调用,会产生多个AO
ⅰ、函数执行前的一瞬间,生成AO活动对象
fun.AO = {
}
ⅱ、 分析参数,形参作为对象的属性名,实参作为对象的属性值
fun.AO = {
num : 5
}
ⅲ、分析变量声明,变量名为属性名,值为undefined,如果遇到AO对象上属性同名,不去做任何改变
fun.AO = {
num : 5
}
ⅳ、分析函数声明,函数名为属性名,值为函数体,如果遇到AO对象上属性同名,则无情覆盖(在这里没有函数声明,跳过)
4)逐行执行
实例:
在这里我们看几个实例:
实例1:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
console.log(test); //function
function test(test){
console.log(test); //function
var test = 123;
console.log(test); //123
function test(){
}
console.log(test); //123
var test = function(){}
console.log(test); //function
}
test(10);
var test = 456;
/*1.分析变量
GO={
test:undefined
}
2.分析函数{
test:function
}
3.逐行执行
第21行函数的调用
3.1test.AO={}
3.2参数
test.AO={
test:10
}
3.3变量声明
test.AO={
test:10
}
3.4函数的声明
test.AO={
test:function
}
4逐行执行
*/
</script>
</body>
</html>
实例2:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
function test(){
console.log(b); //undefined
if(a){ //undefined转换成false
var b = 100;
}
c = 123;
console.log(c); //123
}
var a;
test();
a = 20;
test();
console.log(c); //123
// 1.生成GO
// GO = {
//
// }
// 2.var
// GO = {
// a : undefined
// }
// 3.函数声明
// GO = {
// a : undefined,
// test : function
// }
// 4.逐行执行
// 4.1.1 18行,test调用,生成test.AO ={}
// 4.1.2 参数 没有,跳过
// 4.1.3 var
// test.AO = {
// b : undefined
// }
// 4.1.4 函数声明 没有,跳过
// 4.1.5 结果
// test.AO = {
// b : undefined
// }
// 4.1.6 逐行执行
// 14行,改变GO
// GO = {
// a : undefined,
// test : function,
// c : 123
// }
//
// 4.2 19行 a值发生了改变
// GO = {
// a : 20,
// test : function,
// c : 123
// }
//
// 4.3 20行,test调用 生成test.AO={}
// 4.3.1 参数 没有
// 4.3.2 变量声明
// test.AO = {
// b : undefined
// }
// 4.3.3 函数声明 没有
// 4.3.4 结果
// test.AO = {
// b : undefined
// }
// 4.3.5 逐行执行
// test.AO = {
// b : 100
// }
</script>
</body>
</html>
- 上一篇: IPv4地址转int 数值例子
- 下一篇: 易语言获取车质网最新汽车投诉信息
猜你喜欢
- 2022-07-08 浏览器是如何解析JavaScript的?解析原理介绍
- 2022-07-07 将 JavaScript 嵌入到 Rust 中(rust 嵌入汇编)
- 2022-07-07 从 JavaScript 调用本地函数(javascript的函数调用有哪几种方式)
- 2022-07-07 技术分享 | Frida 实现 Hook 功能的强大能力
- 2022-06-27 47道基础的VueJS面试题(附答案)(vue的面试题 原生js面试题)
- 2022-06-27 JavaScript奇葩面试题--当心逗号表达式(javascript经典面试题)
- 2022-06-27 前端面试题JavaScript(一)(前端js笔试题)
- 2022-06-27 Vue.js部分面试题及答案(vue 面试题目)
- 2022-06-27 js面试题整理(接上篇文章)(前端js面试题)
- 2022-06-27 Javascript 面试的完美指南(开发者视角)(js面试宝典)
你 发表评论:
欢迎- 百度站内搜索
- 关注微信公众号
- 网站分类
-
- 网站公告
- 电子书书籍
- 程序员工具箱
- 编程工具
- 易语言相关
- 网络相关源码
- 图形图像源码
- 系统工具源码
- 易语言模块源码
- 易语言支持库
- 数据库类源码
- 易语言例程
- 易语言游戏开发
- 易语言模块
- 多媒体类源码
- 易语言资源网
- 易语言视频教程
- JS分析教程
- 易语言图文教程
- 易语言常见问题及笔记
- 工具源码
- 易语言版本
- 网络编程
- javascript
- PHP编程
- html
- 正则表达式
- 面试题
- nodejs
- 其它综合
- 脚本专栏
- python
- 按键精灵相关
- 按键精灵图文教程
- 按键精灵视频教程
- 按键精灵Q语言
- 按键精灵安卓版
- golang
- 游戏安全
- 火山相关
- 火山安卓软件
- 火山常见问题及笔记
- 火山安卓源码
- 火山视频教程
- 火山PC版本下载
- 火山PC视窗例程
- 互联网那些事
- 引流推广
- 项目揭秘
- 网络营销
- 营销软件
- QQ营销软件
- 娱乐软件
- 机器人插件
- 培训教程
- 技术教程
- 活动线报
- 数据库
- Redis
- Access
- MongoDB
- Mysql
- 问答
- 其它
- 易语言
- 需求
- 在线教程
- 多线程培训班
- 觅风易语言教程
- 模拟系列教程
- 集中营易语言教程
- 历史数据
- 随机tag
本文暂时没有评论,来添加一个吧(●'◡'●)