javaScript代码执行顺序
javaScript是一种描述型脚本语言,由浏览器进行动态的解析和执行。 页面加载过程中,浏览器会对页面上载入的每个js代码块进行扫描。 JavaScript是一段一段的分析执行的,在分析执行同一段代码中,定义式函数会 被提取出来优先执行。函数定义执行完毕后,才会按顺序执行其他代码。
一、代码块
JavaScript代码块是由一对script开始标签和结束标签包裹的一段代码。 JavaScript是按照代码块来进行编译和执行的,代码块之间相互独立,但是前面执行的变量和方法,后面的代码块可以使用。 前面代码块报错,不影响后面代码块的执行。
二、预处理期和执行期
JavaScript的执行过程分为两个阶段:预处理期和执行期。 预编译期会对本代码块中的所有声明的变量和函数(此时处理的只是声明式函数,而非赋值式函数)进行处理,变量和函数只是进行了声明,并未进行初始化及赋值(即只是分配了内存)。
三、执行顺序
首先进行预处理,之后按照代码的顺序执行代码。
四、声明式函数和赋值式函数
1.声明式函数
function Fun(){
}
2.赋值式函数
var Fn = function{
}
五、变量作用域及作用域链
函数执行过程中,每遇到一个变量,都会经历一次标示符解析的过程,决定从哪里获取及存储数据 。该过程从作用域链的活动对象开始查找,如果找到了就用这个标示符,如果没有找到就 继续搜索作用域链中的下一个对象,如果搜索完所有的对象都未找到,则认为该标示符未定义。 因此标示符所在的位置越深,读写速度越慢,全局变量总是在作用域链的最末端,因此编写代码时应该尽量少使用全局变量 如果一个跨作用域的对象被引用了一次以上,则先把它存储到局部变量里再使用。 因此,如果局部变量和全局变量同名,则程序会使用局部变量而不是全局变量。 var a = "globalStr"; function fun(){ alert(a); var a = "innerstr"; }//弹出undefined。 局部变量a只进行声明并没有赋值,因此输出undefined。
function fun(){
alert(“测试内容1”);
}
fun();
function fun(){
alert(“测试内容2”);
}
fun();
两次函数调用都输出“测试内容2"
这表明,在JavaScript分析执行同一段代码时,定义式的函数会被提取出来优先执行。之后,才会按顺序执行 其他的代码。也就是第一个函数被调用之前已经被第二个函数覆盖了,因此第一次调用函数也同样输出第二个函数的内容。
javaScript代码执行顺序的更多相关文章
- JavaScript 代码执行顺序
一.先预处理后执行 在一个JavaScript文件或一个JavaScript代码块的内部,浏览器会先对代码进行预处理(编译),然后再执行. 预处理会跳过执行语句,只处理声明语句,同样也是按从上到下按顺 ...
- javascript的执行顺序(转载)
之前从JavaScript引擎的解析机制来探索JavaScript的工作原理,下面我们以更形象的示例来说明JavaScript代码在页面中的执行顺序.如果说,JavaScript引擎的工作机制比较深奥 ...
- 浏览器环境下JavaScript脚本加载与执行探析之代码执行顺序
本文主要基于向HTML页面引入JavaScript的几种方式,分析HTML中JavaScript脚本的执行顺序问题 1. 关于JavaScript脚本执行的阻塞性 JavaScript在浏览器中被解析 ...
- 详解JavaScript的任务、微任务、队列以及代码执行顺序
摘要: 理解JS的执行顺序. 作者:前端小智 原文:详解JavaScript的任务.微任务.队列以及代码执行顺序 思考下面 JavaScript 代码: console.log("scrip ...
- Java代码执行顺序(静态变量,非静态变量,静态代码块,代码块,构造函数)加载顺序
//据说这是一道阿里巴巴面试题,先以这道题为例分析下 public class Text { public static int k = 0; public static Text t1 = new ...
- 当C#中带有return的TryCatch代码遇到Finally时代码执行顺序
编写的代码最怕出现的情况是运行中有错误出现,但是无法定位错误代码位置.综合<C#4.0图解教程>,总结如下: TryCatchFinally用到的最多的是TryCatch,Catch可以把 ...
- final、static、代码块、静态代码块、内部类、代码执行顺序
final final域使得确保初始化安全性(initialization safety)成为可能,初始化安全性让不可变形对象不需要同步就能自由地被访问和共享 作用在类上 ...
- [js]js代码执行顺序/全局&私有变量/作用域链/闭包
js代码执行顺序/全局&私有变量/作用域链 <script> /* 浏览器提供全局作用域(js执行环境)(栈内存) --> 1,预解释(仅带var的可以): 声明+定义 1. ...
- 用 console.time()和 console.timeEnd() 测试你的 javascript 代码执行效率
无意中学习到了一种测试 javascript 代码执行效率的一种方法,就记下来便于以后使用,用到了console对象中的 time 和 timeEnd 方法 . console.time('m ...
随机推荐
- 为Tcl编写C的扩展库
Tcl是一个比较简洁的脚本语言,官方地址 http://www.tcl.tk. tcl脚本加载C实现的动态库非常方便. 1. 为Tcl编写一个用C实现的扩展函数. #include <stdio ...
- C和指针 第五章 位数组
5.4的习题:编写一组函数,实现维数组,函数原型如下: //指定位设置为1void set_bit(char bit_array[], unsigned bit_number); //指定位清零 vo ...
- iphone的click导致div变黑
-webkit-tap-highlight-color这个属性只用于iOS (iPhone和iPad).当你点击一个链接或者通过Javascript定义的可点击元素的时候,它就会出现一个半透明的灰色背 ...
- JS中的call()和apply()方法
1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...
- python运算符
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcIAAAHCCAIAAADzel4SAAAgAElEQVR4Aey9+bMcSXLnV1dmna/ejR
- 将csv文件读入数据库
USE LHJTest create table #temp6//创建临时表 ( A nvarchar(max) NOT NULL, B nvarchar(max), C nvarchar(max ...
- div自定义下拉框
因为原生的下拉框不能修改其属性,很难美化下拉框. 所以自己用div简单自定义了一下下拉框,想美化直接修改css即可 <!DOCTYPE html> <html lang=" ...
- js遮罩效果
function ShowLoadingMaskLayer(text) { var htmlContent = '<div id=\"masklayer\">' + ' ...
- windows 8下配置PLSQLDeveloper
Win 8 64位系统上安装64 位Oracle,但是没有64位的PL/SQL,不能连接Oracle数据库,怎么办呢?方法是有的:我们可以通过安装32位的Oracle客户端来实现连接. 工具/原料 P ...
- nmon的安装
安装 mkdir /usr/local/nmon cd /usr/local/nmon wget http://sourceforge.net/projects/nmon/files/nmon_lin ...