js编译和执行顺序
JS是一段一段执行的(以<script>标签来分割),执行每一段之前,都有一个“预编译”,预编译干的活是:声明所有var变量(初始为undefined),解析定义式函数语句。
还有个关于 "window作用域下,a = 1和var a = 1" 的区别的也很经典:
a = 1相当于window.a = 1,是动态地为window添加一个成员;
var a = 1是在当前作用域(也就是window)下声明一个a,这个声明是在整个作用域内都有效的。 换句话说,其实区别就在于var a = 1比a = 1多了一个声明的行为。
再看几个例子:
1.
alert(t);
alert('ok');
t = 2;
t未声明,执行报错。
2.
alert(t);
alert('ok');
var t = 2;
弹出undefined和ok。预编译的时候,声明了变量t;执行到alert(t)这行代码的时候,t尚未被赋值,所以弹出undefined。
3.
a();
function a() {}
alert('ok');
弹出ok。预编译的时候,解析了定义式函数语句function a() {},顺利执行。
4.
a();
var a = function() {};
alert('ok');
a不是函数,执行报错。预编译的时候,声明了变量a = undefined;执行到a()时,a还等于undefined,不是函数,所以执行a()会报错。
5.
<script type="text/javascript">
a();
alert('first block');
</script>
<script type="text/javascript">
alert('second block');
</script>
6.
- 弹出second block。因为JS是一段一段执行的,第一段执行到a()的时候报错,整个第一段都不会再执行,第二段正常执行。
firefox下的还有个小技巧:
如果上述例子中该报错的没有报错,输入about:config, 搜索strict, 看下javascript.options.strict, 如果是false的把他改为true。
js编译和执行顺序的更多相关文章
- JS的预编译和执行顺序 详析(及全局与局部变量)
最近在复习javascript的事件处理时发现了一个问题,于是总结一下:javascript的预编译和执行顺序的问题: <html> <head> <title> ...
- JS的预编译和执行顺序 详析
原文:JS的预编译和执行顺序 详析 最近在复习javascript的事件处理时发现了一个问题,然后也是我来写javascript的预编译和执行顺序的问题 代码: 复制代码 代码一 <ht ...
- php课程 1-3 web项目中php、html、js代码的执行顺序是怎样的(详解)
php课程 1-3 web项目中php.html.js代码的执行顺序是怎样的(详解) 一.总结 一句话总结:b/s结构 总是先执行服务器端的先.js是客户端脚本 ,是最后执行的.所以肯定是php先执行 ...
- 关于JavaScript预编译和执行顺序以及函数引用类型的思考
昨晚在对项目中的一部分做模块化处理的时候,遇到了一个问题,一个重新定义的function对一个通用类中的function进行赋值覆盖的时候,失败了.问题抽象出来是这样的: <script > ...
- javascript的预编译和执行顺序
原文:javascript的预编译和执行顺序 最近在复习javascript的事件处理时发现了一个问题,然后也是我来写javascript的预编译和执行顺序的问题 代码: 代码一<html> ...
- js 运算符的执行顺序
js 运算符的执行顺序 js 运算符优先级 Operator Precedence 下表从最高(21)到最低(1)优先顺序排列 left-to-right 从左到右 / 先左后右 right-to-l ...
- JS 的预编译和执行顺序
脚本执行js引擎做的工作: 语法分析 预编译 解释执行
- JS中函数执行顺序的问题?
作者:知乎用户链接:https://www.zhihu.com/question/23564807/answer/82996422来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- html和js,外部js 的下载执行顺序
当用户开始访问,首先下载html资源和外部js资源,在chrome中显示的是html先下载,然后下载外部js,外部js的下载顺序安引用顺序,但是下载到达情况则视情况而定,接着才是图片和其他资源,但是要 ...
随机推荐
- iOS类的继承关系
- poj 2960 S-Nim(SG函数)
S-Nim Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3694 Accepted: 1936 Description ...
- 最短路--Dijkstra算法 --HDU1790
//Dijkstra #include<iostream> #include<cstdio> #include<cstdlib> #include<cstri ...
- EXCEL VBA运行不显示系统提示
Sub XXX() Application.DisplayAlerts = False '代码段 Application.DisplayAlerts = True End Sub 以下是MICROSO ...
- 高性能、高流量Java Web站点打造的22条建议
@http://www.csdn.net/article/2013-12-20/2817861-22-recommendations-for-building-effective-high-traff ...
- HIVE自定义函数 UDF
自定义my_md5hash 具体hive源码怎么调用看我另外一篇博客 package udf.hive.myudf; import org.apache.commons.codec.digest.Di ...
- jersey 过滤器
这里使用的Jersey 是 1.1 版本 1. web.xml 配置 <?xml version="1.0" encoding="UTF-8"?> ...
- winform设置DataGridView样式 (蓝色)
本文转载:http://www.cnblogs.com/hailexuexi/archive/2012/04/23/2466398.html 代码: #region DataGridVeiw Styl ...
- 【UVA】11732 - strcmp() Anyone?
一開始不知道这样的一维建树方法. 每次一层用一个链指向下一层最左边的结点,之后每一层用一个链表串联全部的结点,这样就建树成功了. 14328524 11732 option=com_onlinejud ...
- [置顶] iptables 性能 测试
一直研究iptables 性能,这几天刚好有硬件资源,于是发始下手测试iptables NAT 性…… 硬件环境 : 服务器: IBM x3650 ( 4G E5645 6核 12线程) ESXi ...