JS中script词法分析
核心:JS中的script是分段执行的。
<script>
var i = 10;
</script>
<script>
alert(i);
</script>
上面的例子中,弹出结果10。因为在之前script语句段定义的变量和函数可以再其他script语句段中使用。在一个js程序中,可以有多个script语句段,那么它们如何工作呢?
script执行过程:
1.读入第一个代码段
2.编译(声明变量,声明函数,语法检查,语义检查,代码优化,分析并得到代码书)
3.执行
4.读入下一代码段
5.编译
6.执行
7.读入下一代码段
......
n.结束
举个例子来说
<script>
//例1
alert(i);
</script>
<script>
//例2
alert(i);
var i=10;
</script>
例1的代码执行后,什么都不会弹出,因为已经报错了。但例2的代码会弹出undefined。因为i已经声明但没有赋值。因为代码段是先编译再执行,编译负责生成,执行负责赋值。
区分编译错误和运行错误:
<script>
alert(i; //编译错误
alert(i);//运行错误
alert('hello');
</script>
但无论是哪种错误,当前代码段中的后面的代码都不执行。
无论是哪种错误,不会影响后面的代码段的执行。
编译错误时,当前代码段会停止,代码中所有声明全部无效。
运行错误时,前面的代码已经执行完毕,不会影响该代码段内前面的内容。
JS中script词法分析的更多相关文章
- js中script的上下放置区别 , Dom的增删改创建
回顾 javascript分为三部分: 1.ECMAScript5.0 es6(阮一峰) es7 es8 es6中有类的概念 声明变量 var let(es6中语法) 内置函数 Date Math.r ...
- 20160113 js中选择多个check一块删除
js中<script type="text/javascript"> $(document).ready(function (e) { $("#Button2 ...
- js中的script标签
在页面中用script标签引入javascript文件(<script type="text/javascript" src="js文件地址">&l ...
- HTML5中script的async属性异步加载JS
HTML5中script的async属性异步加载JS HTML4.01为script标签定义了5个属性: charset 可选.指定src引入代码的字符集,大多数浏览器忽略该值.defer 可 ...
- JS中的作用域和作用域链
本文原链接:https://cloud.tencent.com/developer/article/1403589 前言 作用域(Scope) 1. 什么是作用域 2. 全局作用域和函数作用域 3. ...
- 谈谈JS中的函数节流
好吧,一直在秋招中,都没怎么写博客了...今天赶紧来补一补才行...我发现,在面试中,讲到函数节流好像可以加分,尽管这并不是特别高深的技术,下面就聊聊吧! ^_^ 备注:以下内容部分来自<Jav ...
- 【repost】JS中的异常处理方法分享
我们在编写js过程中,难免会遇到一些代码错误问题,需要找出来,有些时候怕因为js问题导致用户体验差,这里给出一些解决方法 js容错语句,就是js出错也不提示错误(防止浏览器右下角有个黄色的三角符号,要 ...
- js中几种实用的跨域方法原理详解(转)
今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开 ...
- js中判断对象具体类型
大家可能知道js中判断对象类型可以用typeof来判断.看下面的情况 <script> alert(typeof 1);//number alert(typeof "2" ...
随机推荐
- Unable to convert MySQL date/time value to System.DateTime 错误
C#读取MySql时,如果存在字段类型为date/datetime时的可能会出现以下问题“Unable to convert MySQL date/time value to System.DateT ...
- 教你如何做Lotus Domino的应用开发
http://www.lotuschina.net/club/thread-7309-1-1.html
- struts2注解
一.配置web.xml <filter> <filter-name>struts2</filter-name> <filter-class>org.ap ...
- jQuery数据缓存方案详解:$.data()的使用
我们经常使用隐藏控件或者是js全局变量来临时存储数据,全局变量容易导致命名污染,隐藏控件导致经常读写dom浪费性能.jQuery提供了自己的数据缓存方案,能够达到和隐藏控件.全局变量相同的效果,但是j ...
- iOS分析UI利器——Reveal简单使用
一,简单使用 * 在xcode中打开你的项目(project); * 打开reveal 和选中 Help → Show Reveal Library in Finder * 把Reveal.frame ...
- dede织梦cms-dede:autochannel标签
按排序位置的获取单个栏目的链接信息 >>dede>> {dede:autochannel partsort='' typeid=''}{/dede:autochannel} & ...
- PS特效精粹
冲击有力的广告效果 神奇画笔功能 + 强大的图层样式 Photoshop中的三维特效
- 使用nose 进行Python项目的自动化测试
一.为什么使用nose? 编写测试更容易.nose可以自动识别继承于unittest.TestCase的测试单元,并执行测试,而且,nose也可以测试非继承于unittest.TestCase的测试单 ...
- DB2数据库参数建议(AIX)
修改用户最大进程数: chdev -l sys0 -a maxuproc=' 用户资源配置:对实例用户,fence用户,应用用户添加如下限制: db2inst1 : fsize=- fsize_har ...
- JS获取当前时间戳的方法
JavaScript 获取当前时间戳:第一种方法: var timestamp = Date.parse(new Date()); 结果:1280977330000第二种方法: var timesta ...