javascript的执行顺序
先看下面两段js程序,先是定义式函数写法:
- <script type="text/javascript">
- function myfunc(){
- alert("第一次调用");
- };
- myfunc(); //得出的是 第二次调用
- function myfunc() {
- alert("第二次调用");
- };
- myfunc(); //得出的是 第二次调用
- </script>
接下来是变量式函数写法:
- <script type="text/javascript">
- var myfunc = function (){
- alert("第一次调用");
- };
- myfunc(); //得出的是 第一次调用
- myfunc = function () {
- alert("第二次调用");
- };
- myfunc(); //得出的是 第二次调用
- </script>
在定义式函数写法的代码中执行两个方法后的结果是一样的,就等于定义式函数中第一个函数没起到任何作用,得到的都是第二个函数的结果,从结果来看,JavaScript执行顺序不是按顺序一条一条来执行。
在变量式函数写法的代码中执行两个方法后的结果是不同的,从这来看,JavaScript执行顺序是按顺序一条一条来执行的,
从这两个不同函数的表示方法来看,在同一段程序的分析执行中,定义式函数有优先权,定义式函数执行完后,其他语句(包括变量式函数)才顺序执行,那么下面的例子也就不难得出结果了:
- <script type="text/javascript">
- function myfunc(){
- alert("第一次调用");
- };
- myfunc(); //输出 第二次调用
- var myfunc = function (){
- alert("第三次调用");
- }
- myfunc();//输出 第三次调用 上次的结果已经被这次的变量式函数结果覆盖
- function myfunc() {
- alert("第二次调用");
- };
- myfunc();//输出 第三次调用 function myfunc()已经不再执行
- myfunc = function () {
- alert("第四次调用");
- }
- myfunc();//输出 第四次调用
- </script>
结果就不像我们上次分析的那样了,这里的改变就是把两个相同的方法放在两个JavaScript片段里,这时两个方法都得出各自的结果,这里也就说明JavaScript是按一段一段来分析执行的,如下面代码:
- <script type="text/javascript">
- myfunc();//输出 第一次调用
- var myfunc = function (){
- alert("第二次调用");
- }
- myfunc();//输出 第二次调用
- function myfunc() {
- alert("第一次调用");
- };
- </script>
- <script type="text/javascript">
- myfunc();//输出 第三次调用
- var myfunc = function (){
- alert("第四次调用");
- }
- myfunc();//输出 第四次调用
- function myfunc() {
- alert("第三次调用");
- };
- myfunc();//输出 第四次调用
- </script>
贴内牛人总结:
1、<script>中的代码是阻塞式同步下载执行的,当浏览器遇到一个<script>标签会先下载这个标签的代码然后执行。在完成这件事之前不会加载其他任何标签和资源。
2、变量和函数的声明发生在代码解析期,但是,变量赋值发生在运行期,因此反复声明同名函数和变量,最后一次声明的函数被保存下来,直到运行到变量赋值的代码才发生变化。
javascript的执行顺序的更多相关文章
- javascript的执行顺序(转载)
之前从JavaScript引擎的解析机制来探索JavaScript的工作原理,下面我们以更形象的示例来说明JavaScript代码在页面中的执行顺序.如果说,JavaScript引擎的工作机制比较深奥 ...
- javaScript代码执行顺序
javaScript是一种描述型脚本语言,由浏览器进行动态的解析和执行. 页面加载过程中,浏览器会对页面上载入的每个js代码块进行扫描. JavaScript是一段一段的分析执行的,在分析执行同一段代 ...
- JavaScript 代码执行顺序
一.先预处理后执行 在一个JavaScript文件或一个JavaScript代码块的内部,浏览器会先对代码进行预处理(编译),然后再执行. 预处理会跳过执行语句,只处理声明语句,同样也是按从上到下按顺 ...
- JavaScript执行顺序分析
之前从JavaScript引擎的解析机制来探索JavaScript的工作原理,下面我们以更形象的示例来说明JavaScript代码在页面中的执行顺序.如果说,JavaScript引擎的工作机制比较深奥 ...
- Javascript动态加载Html元素到页面Dom文档结构时执行顺序的不同
我们有时会通过ajax动态获取一段Html代码,并且将这段代码通过javascript放到页面的Dom结构中去. 而很多时候通过ajax动态获取的Html代码中也包含javascript代码,有一点需 ...
- javascript运行机制之执行顺序详解(转)
转自http://www.admin10000.com/document/3385.html JavaScript是一种描述型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言, ...
- javascript 执行顺序详解
JavaScript是一种描述 型脚本语言,它不同于java或C#等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行.如果你不能理解javaScript 语言的运行机制,或者简 ...
- javascript的预编译和执行顺序
原文:javascript的预编译和执行顺序 最近在复习javascript的事件处理时发现了一个问题,然后也是我来写javascript的预编译和执行顺序的问题 代码: 代码一<html> ...
- JavaScript 运行机制之执行顺序详解
JavaScript是一种描述型脚本语言,它不同于 Java 或 C# 等编译性语言,它不需要进行编译成中间语言,而是由浏览器进行动态地解析与执行.如果你不能理解 JavaScript 语言的运行机制 ...
随机推荐
- 帝国cms 列表页分页样式修改美化【2】
上一篇(帝国cms 列表页分页样式修改美化[1])中我们已经对分页说了一个大概,下面我们就自己动手弄一个分页把: 第一步:进入帝国cms后台,点击系统设置->系统参数设置->信息设置:里面 ...
- odoo9 install
odoo9 的安装需要 nodejs 的 lessc 命令. 需要先安装nodejs 后,使用nmp(nodejs的一个包管理工具) 安装lessc等功能. window 1:安装nodejs. 安装 ...
- pyqt5 窗体布局
窗体布局 1使用qtdesigner新建一个对话框,然后拖放几个按钮和文本框,按钮使用水平布局,效果如下: 鼠标选中水平布局再选中文本框,进行垂直布局,如下: 垂直布局后的效果如下: 然后,如何让窗体 ...
- WPF布局容器综合展示
Border控件,以及几个重要要的属性:Background:背景的 Brush 对象BorderBrush:用来绘制边框BorderThickness: Border 边框的宽度,设置边框每一边的线 ...
- 源码编译基于Android平台的XBMC笔记
参考官方网站:https://github.com/xbmc/xbmc/blob/master/docs/README.android 1. 编译主机系统 Ubuntu (12.04) 64Bit ...
- 新年之际,盘点一些APP开发技巧
(原文:Reader Submissions - New Year's 2015 作者:Mattt Thompson 译者:培子 校对:蓝魂) 回顾过去一年发生在我们身边的事情时,有一点不得不提:对苹 ...
- Mvc Model 模板的获取【学习笔记】
MVC的Model模板有两种:一种编辑模式(@Html.EditorFor()).一种显示模式(Html.DisplayFor()). 模板的获取与执行(以下转自这里): 当我们调用HtmlHelpe ...
- 检测目标程序ELF bit是32还是64
android操作系统在5.0之后加入了对64位程序的支持,同时兼容运行32位的进程 android的进程绝大部分是zygote父进程fork出来的子进程 zygote进程fork出来的进程是32位进 ...
- 【UVA11294】Wedding (2-SAT)
题意: 有N-1对夫妻参加一个婚宴,所有人都坐在一个长长的餐桌左侧或者右侧,新郎和新娘面做面坐在桌子的两侧.由于新娘的头饰很复杂,她无法看到和她坐在同一侧餐桌的人,只能看到对面餐桌的人.任意一对夫妻不 ...
- 关于 all-delete-orphan
当关联双方存在父子关系,就可以在 set 处设定 cascade 为 all-delete-orphan 所谓父子关系,即指由父方控制子方的持久化圣明周期,子方对象必须和一个父方对象关联.如果删除父方 ...