js 解析过程
来源:互联网 发布:雅兰 深睡尊享版 知乎 编辑:程序博客网 时间:2024/06/07 05:40
浏览器在读取HTML文件的时候,当遇到script标签的时候,才会正式开始工作。
JavaScript解析器工作步骤:
1、预解析(声明期): var、 function、 参数;、
会从代码的开始搜索直到结尾,只去查找var、function和参数等内容并提升他们
提升:函数声明、变量声明、被提升到范围作用域的顶端 :
var a=10; 中var就是变量声明,被提升,并预解析成了a="undefined"function fn(){alert(110)};中fn函数声明,被提升,并解析成了fn=function fn(){alert(110)}就等于它本生;
备注:如果遇到重名分为以下两种情况:
1.遇到变量和函数重名了,只留下函数
例子:
var a=10; function a(){alert(110)}; 最终在预解析里只有 a= function a(){alert(110)};
2.遇到函数重名了,根据代码的上下文顺序,留下最后一个(后来居上)
function a(){alert(110)} function a(){alert(120)} 最终在预解析里只有 a= function a(){alert(120)}
2、逐行解读代码。
例子:
<script type="text/javascript"> alert(a); var a=10; function fn(){alert(a); } fn();</script>
1预解析 a="undefined" fn= function fn(){alert(a);} 2逐行解读代码(从script第一行开始) alert(a); a="undefined"(预解析里) //undefined var a=10; 此时预解析里的a从"undefined"变成10 fn();//10
重名情况1(函数声明和变量声明):
<script type="text/javascript"> alert(a); var a=10; function a(){ alert(a); } a();</script>
1预解析 a= function a(){alert(a);} 2逐行解读代码(从script第一行开始) alert(a); // function a(){alert(a);} var a=10; 此时预解析里的a从function a(){alert(a);}变成10 a();就相当于10();// a is not a function
重名情况2(函数声明和函数声明):
<script type="text/javascript"> function a(){ alert(110); } function a(){ alert(120); } a();</script>
1预解析 a= function a(){alert(120);} 2逐行解读代码(从script第一行开始) a();就相当于function a(){alert(120);}() ;//120
阅读全文
0 0
- js 解析过程
- JS---函数的解析过程
- js预编译解析执行过程分析
- 09、JS解析过程与script域
- js的解析与执行过程
- js的解析和执行过程
- JS 的解析与执行过程
- JS的解析过程和作用域
- JS的解析与执行过程
- Node.js 学习过程总结(二)之网页解析
- js 解析
- NetBIOS名字解析过程
- ClearCase Deliver过程解析
- 存储过程大解析
- DNS解析过程
- XSL的解析过程
- 域名解析及解析过程
- 函数重载解析过程
- 数据库中char与varchar类型的区别
- 对对子
- 安卓java时间格式化字母对照
- 浅谈产品功能设计遇到的坑
- linux内存与java进程之间的关系
- js 解析过程
- Keras使用初体验
- 计算机网络实验报告
- 搭建LAMP(Centos7+Apache+MySQL+PHP)环境
- 使用vuejs获取两个数组id,如果某一个数组id成功匹配另一个数组内id,那么就勾选
- sublime插件大全
- java读取XML文件内容的方法
- C#线程传值到主窗体,主窗体控件接收到数据但是显示不出来,请问是什么问题? (回答)
- opencv3.0.0 for linux