javascript代码解释执行过程
javascript是由浏览器解释执行的脚本语言,不同于java c,需要先编译后运行,javascript 由浏览器js解释器进行解释执行,总的过程分为两大块,预编译期和执行期
下面的几个demo解释了js解释器对变量和代码的解释过程
//#demo1
foo();//alert(1)
function foo(){//声明式函数
alert(1);
}
foo2();//undefined is not a function
var foo2 = function(){//赋值式函数声明,其实是函数表达式
alert("foo2");
};
//#demo2
alert(str);//undefined
var str="str";
alert(str);//str
js执行过程分为与编译期和执行期(以代码块为单位,边解释边执行),在预编译期,js解释器会对本代码段内所有的 声明的变量和方法进行处理,将变量和方法提到对应的作用域的最前面,该过程只是对变量进行声明,并不会进行初始化或者赋值(缺省值默认为undefined)
//#demo1中声明式函数与赋值式函数区别在于 声明式函数会在预编译期被整体提到作用域前面,所以其实#demo1经过预编译后代码如下:
var foo2; //缺省值是'undefined'
function foo(){
alert(1);
}
foo();
foo2();//undefined is not a function
foo2 = function(){
alert('foo2');
};
JavaScript 中局部变量只可能通过两种方式声明,一个是作为函数参数,另一个是通过 var 关键字声明。 var 表达式和 function 声明都将会被提升到当前作用域的顶部,看一下#demo3
bar();
var bar = function() {};
var someValue = 42; test();
function test(data) {
if (false) {
goo = 1; } else {
var goo = 2;
}
for(var i = 0; i < 100; i++) {
var e = data[i];
}
}
上面代码在运行之前将会被转化。JavaScript 将会把 var 表达式和 function 声明提升到当前作用域的顶部。
var bar,someValue;
function test(data){
var goo,i,e;
if(false){
goo = 1;
} else{
goo = 2;
}
for(i=0;i<100;i++){
e = data[i];
}
}
bar();//undefined
bar = function(){};
someValue = 42;
test();
当访问函数内的 goo 变量时,JavaScript 会按照下面顺序查找:
1.当前作用域内是否有 var goo的定义。 2.函数形式参数是否有使用 goo名称的。 3.函数自身是否叫做 goo。 4.回溯到上一级作用域,然后从 #1 重新开始
javascript代码解释执行过程的更多相关文章
- 关于JavaScript代码的执行效率总结
Javascript是一门非常灵活的语言,我们可以随心所欲的书写各种风格的代码,不同风格的代码也必然也会导致执行效率的差异,开发过程中零零散散地接触到许多提高代码性能的方法,整理一下平时比较常见并且容 ...
- JavaScript代码内部执行顺序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JavaScript代码不执行
一天先后有两个同事问我为啥他的js代码出现了莫名其妙的问题 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "h ...
- JavaScript 函数的执行过程
每一个JavaScript函数都是Function对象的一个实例, 它有一个仅供JavaScript引擎存取的内部属性[[Scope]]. 这个[[Scope]]存储着一个作用域的集合, 这个集合就叫 ...
- What happens to our code? JavaScript 代码是怎样执行的
1. 我们的代码第一步会被parser 语法分析程序分析. 如果没有报错之后 2. 生产SyntaxTree, 我们的代码会转换成machine code 3. 最终 我们的代码会被运行出来. 下面的 ...
- Javascript的执行过程详细研究
下面我们以更形象的示例来说明JavaScript代码在页面中的执行顺序.如果说,JavaScript引擎的工作机制比较深奥是因为它属于底层行为,那么JavaScript代码执行顺序就比较形象了,因为我 ...
- 游览器中javascript的执行过程
在讲这个问题之前,先来补充几个知识点,如果对此已经比较了解可以直接跳过 大多数游览器的组件构成如图 在最底层的三个组件分别是网络,UI后端和js解释器.作用如下: (1)网络- 用来完成网络调用,例如 ...
- 《浏览器工作原理与实践》<07>变量提升:JavaScript代码是按顺序执行的吗?
讲解完宏观视角下的浏览器后,从这篇文章开始,我们就进入下一个新的模块了,这里我会对 JavaScript 执行原理做深入介绍. 今天在该模块的第一篇文章,我们主要讲解执行上下文相关的内容.那为什么先讲 ...
- JS-预解析(提升)与代码执行过程
1,预解析的过程. 2,代码的执行过程. 预解析:程序在执行过程,会先将代码读取到内存中检查,会将所有的声明在此处进行标记,所谓的标记就是让js解析器知道这个名字,后面在使用这个名字的时候,不会出现未 ...
随机推荐
- WebGoat学习——跨站脚本攻击(Cross‐Site Scripting (XSS))
跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是指攻击者向被攻击Web 页面里插入恶意html代码,当用户浏览该页之时 ...
- UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)
UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ...
- Flex SDK包内文件夹内容说明
打开SDK目录,让我们看看SDK中都包含了哪些内容: ant包含Flex对Ant的支持库,JAR和Java源码都有,方便我们基于Ant完成对项目的构建 asdoc基于ASDOC我们可以很方便的生成代码 ...
- php 扩展apc 参数优化
编辑php.ini 输入下面 [apc] apc.enabled=1apc.shm_segments = 1apc.shm_size = 1Gapc.ttl = 0apc.user_ttl = 0ap ...
- 一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库 RxJava,相当好
https://github.com/ReactiveX/RxJava https://github.com/ReactiveX/RxAndroid RX (Reactive Extensions,响 ...
- Test log4net
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGloba ...
- datagrid url json
<div class="easyui-accordion" style="width:500px;height:300px;"> <div t ...
- hdu 1199 Color the Ball
http://acm.hdu.edu.cn/showproblem.php?pid=1199 Color the Ball Time Limit: 2000/1000 MS (Java/Others) ...
- JPA多对多@manytomany注解配置实例
维护端注解 @ManyToMany (cascade = CascadeType.REFRESH) @JoinTable (//关联表 name = "student_teacher&quo ...
- IllegalStateException
例1 public static void main(String[]sdf){ List<String> list = new ArrayList<String>(); li ...