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 语言的运行机制 ...
随机推荐
- apache2.4配置虚拟目录
刚开始学习,跟着韩顺平老师的视频课件学习ing~ 这是自己在配置虚拟目录时遇到的问题以及解决办法,记录下来~ ---------------------------分割线君-------------- ...
- C语言怎么计算程序所花时间
在函数之前和之后取得系统的时间,然后相减就是函数执行时间,不过在取得系统时间的时候,最小单位是微秒 具体代码如下: #include<stdio.h> #include<iostre ...
- tomcat发布静态网页
- "Invalid bound statement (not found): com.sitech.admin.dao.TbOpenAbilityInfoDao.findAbilityReadyUp"mybatis配置文件bug
问题描述: 通常在正常启动某项工程后操作某个功能时抛出的bug: org.apache.ibatis.binding.BindingException: Invalid bound statement ...
- Servo: The Embeddable Browser Engine
Embedding, in the context of this article, is the process of hosting a web rendering engine inside a ...
- Count The Pairs
hdu4750:http://acm.hdu.edu.cn/showproblem.php?pid=4750 题意:给你一个带权无向图,然后让你求这样的点对s,t,使得s--t的所有路径上的最大的边的 ...
- Myeclipse中可以正常显示,但运行后的网页找不到图片
目录为: 1 douban 1.1 css 1.2 image 2 pages 2.1 index.jsp 路径为:<img src="../douya/image/lg ...
- SQL servere 范式、事务
一.数据库范式: 1.构造数据库必须遵循一定的规则.在关系数据库中,这种规则就是范式. 范式是符合某一种级别的关系模式的集合.数据库中的关系必须满足一定的要求,即满足不同的范式. 满足最低要求的范式是 ...
- 第1章(三)安装VS2015和Xamarin For VS
原文 第1章(三)安装VS2015和Xamarin For VS 操作系统:Win7 64位(sp1或更高版本) 1.安装VS2015 VS2015简体中文企业版:vs2015.ent_chs.is ...
- android 上传图片到服务器Tomcat(Struts2)
在做android开发的时候,有时你会用到图片的上传功能,在我的android项目中,我是选中图片,点击上传多张图片 android客户端上传图片部分的代码如下: package com.exampl ...