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" ...
随机推荐
- 【转】查询oracle比较慢的session和sql
-查询最慢的sql select * from ( select parsing_user_id,executions,sorts command_type,disk_reads,sql_text f ...
- css3之3D魔方动画(小白版)
在这里分享一下3D魔方动画,html5+CSS3即可完成~无图无真相,先上效果图 第一步非常简单,就是先将魔方的结构画出来.大家都玩过魔方,知道魔方是一个有六个面的正方体.这里我们先写一个大的di ...
- JavaScript中严格模式"use strict";需注意的几个雷区:
1.with语句会抛错误 2.未声明的变量被赋值会报错 3.arguments在严格模式下变为静态,传入的参数与arguments无关系 4.delete会报错 5.对象的重复属性名会报错 6.禁止八 ...
- Java_类似java.lang.VerifyError: Expecting a stackmap frame at branch target 22 in method的解决方法
报异常的方法内使用了Java 7的新特性:自动资源释放,类似于try(){},即在try后面跟一括号,在括号里面对一些资源赋值,try里面的代码块执行完毕之后会自动释放try后面的括号中声明的资源. ...
- C# 使用access,报错:标准表达式中数据类型不匹配
最初以为是数字类型造成的,结果最后才发现是日期格式错误,这是我的参数 db.AddInParameter(dbCommand, "savedate", DbType.DateTim ...
- Java Hashtable的实现
先附源码: package java.util; import java.io.*; /** * This class implements a hash table, which maps keys ...
- LabVIEW 吸星大法 - 看见的好东西都是我的(上篇)
前言 写了多年的LabVIEW程序,你是否面临这样的问题 总是在做一些重复的工作,感觉很没有意思: 总在不停的写代码,做类似的控件,实现相同的功能,丝毫没有成就感: 总在天加班,没有时间去提高自己; ...
- Android 中关于ListView分割线的设置
今天发现许多App上的listview的item之间的分割线都只显示了右边一部分,而左边的那一半则没有,第一反应则是给分割线设置一张背景图片就ok了: android:divider="@m ...
- CSS基础篇之选择符3
border(边框) 如何用CSS调出边框 我们给p标签加一个边框试一下 p{ border:1px solid #ccc:/*这是缩写*/ } 第一个值是为边框的宽度 第二个值是为边框线样式为直线 ...
- c++用法的学习心得
关于C++这门课,是我在大一的时候开始学习的,那时候接触的就是单纯的一些C++的基本语法规则,基本的编程规则.但是我们都有这样的困惑:课堂和教材的 内容基本上都能接受和理解,但真要实际动手编写程序又感 ...