JavaScript解析机制
JavaScript是一种解释型语言,按照<script>块儿来预编译和执行。
JavaScript解释器在预编译阶段,先预声明变量,再预声明函数。在执行阶段,进行变量赋值,和函数执行。
示例1:
预编译阶段,对于变量只进行预声明,并初始化值为undefined,在执行阶段才真正进行赋值。
alert(variableA); //undefined
var variableA = 2;
alert(variableA); // alert(funcA); //function funcA(){alert('I am funcA.')}
funcA(); //I am funcA.
function funcA(){
alert('I am funcA.');
}
示例2:
预编译预条件无关!
alert(variableA); //undefined
alert(funcA); //function funcA(){alert('I am funcA.')}
funcA(); //I am funcA if(true){
var variableA = 2; }else{
function funcA(){
alert('I am funcA.');
}
}
alert(variableA); //
示例3:
JavaScript按照<script>代码块来预编译!
<script>
funcA(); //I am funcA too.
function funcA(){
alert('I am funcA.');
}
function funcA(){
alert('I am funcA too.');
}
</script>
<script>
funcA(); //I am funcA.
function funcA() {
alert('I am funcA.');
}
</script>
<script>
funcA(); //I am funcA too.
function funcA() {
alert('I am funcA too.');
}
</script>
示例4:
先预声明变量,再预声明函数,因此,预编译阶段variableA函数覆盖了variableA变量。在执行阶段,variableA变量被赋值为2,
alert(variableA); //function variableA(){alert('I am variableA.')}
var variableA = 2;
function variableA(){
alert('I am variableA.');
}
alert(variableA); //
alert(variableA); //function variableA(){alert('I am variableA.')}
function variableA(){
alert('I am variableA.');
}
var variableA = 2; alert(variableA); //
示例5:
alert(variableA); //undefined
var variableA = function(){
alert('I am variableA.');
}
alert(variableA); //function variableA(){alert('I am variableA.')}
alert(variableA); //undefined
var variableA = function variableA(){
alert('I am variableA.');
} alert(variableA); //function variableA(){alert('I am variableA.')}
示例6:
函数默认返回值为undefined
var variableA = funcA(2);
function funcA(num){
num = num + 1;
} alert(variableA); //undefined
JavaScript解析机制的更多相关文章
- javascript解析机制——预解析
JavaScript解析机制是什么? JavaScript解析过程分为两个阶段,一个是编译阶段,另外一个就是执行阶段. * 编译阶段 编译阶段就是我们常说的JavaScript预解析( ...
- javascript解析机制、闭包详解
js解析机制: js代码解析之前会创建一个如下的词法环境对象(仓库):LexicalEnvironment{ } 在扫描js代码时会把: 1.用声明的方式创建的函数的名字: 2.用var定义的变量的名 ...
- JavaScript解析机制与闭包原理实例详解
js代码解析机制: js代码解析之前会创建一个如下的词法环境对象(仓库):LexicalEnvironment{ } 在扫描js代码时会把: 1.用声明的方式创建的函数的名字; 2.用var定义的变量 ...
- JavaScript解析机制之变量提升
1.什么是预解析? 在当前作用域下,JS 运行之前,会把带有 var 和 function 关键字的事先声明,并在内存中安排好.(这个过程也可以理解为变量提升)然后再从上到下执行 JS 语句(预解析只 ...
- 轻松搞定javascript变量(闭包,预解析机制,变量在内存的分配 )
变量: 存储数据的容器 1.声明 var 2.作用域 全局变量. 局部变量. 闭包(相对的全局变量): 3.类型 a.基本类型(undefi ...
- 从var func=function 和 function func()区别谈Javascript的预解析机制
var func=function 和 function func()在意义上没有任何不同,但其解释优先级不同:后者会先于同一语句级的其他语句. 即: { var k = xx(); function ...
- JavaScript 预解析机制
首先我们来看一段代码: <script> console.log(a); var a = 10; </script> 此时运行结果为 为什么会显示undefined呢?这就 ...
- 进击JavaScript核心 --- (2)函数和预解析机制
一.函数 每个函数都是 Function类型的实例,也具有属性和方法.由于函数也是一个对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定 1.函数的定义方式 (1).函数声明 fun ...
- javascript运行机制
太久没更新博客了,Javascript运行机制 Record it 1.代码块 JavaScript中的代码块是指由<script>标签分割的代码段.例如: <script type ...
随机推荐
- 翻译Android USB HOST API
翻译Android USB HOST API 源代码地址:http://developer.android.com/guide/topics/connectivity/usb/host.html 译者 ...
- ColorComboBox
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...
- sqlserver 数据行统计,秒查语句
1.传统统计方式 ...
- win主机用web.config和httpd.ini实现301重定向
当你准备好好看这篇文章的时候,你应该已经知道了301重定向的作用与意义了,那么这里就不多加解释了. 那么我唯一想提的就是关于域名带与不带www的区别,并且301重定在其中的意义,详情:域名带与不带ww ...
- 转战WebApp: 最适合Android开发者的WebApp框架
随着移动端设备越来越多, 微信应用号即将发布, 越来越多的页面需要被移动浏览器承载, HTML5开发大热, 我们需要掌握Web开发的技能来适应时代变化. 合适的WebApp框架 AndroidUI4W ...
- css 选择符
css参考手册:css.doyoe.com 在css3中,不同的浏览器可能需要不同的前缀,它表示该css属性或规则尚未成为W3C标准的一部分,是浏览器的私有属性,虽然目前较新版本的浏览器都是不需要前缀 ...
- thread跟Runnable实现多线程
//两种实现方式的区别和联系: //在程序开发中只要是多线程肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下好处: //避免点继承的局限,一个类可以继承 ...
- VS2015升级Update2之后Cordova程序提示:此应用程序无法在此电脑上运行
VS2015在升级到Update2之后,有可能出现如下异常,在运行Cordova项目时提示: 查看输出面板会有乱码错误信息: 出现此问题的原因是在于npm程序损坏了.vs调用的npm程序并不是在nod ...
- 监听指定端口数据交互(HttpListenerContext )
很怀念以前做机票的日子,,,,可惜回不去 以前的项目中的,拿来贴贴 场景:同步第三方数据,监听指定地址(指定时间间隔,否则不满足,因为需要处理粘包问题,改篇未实现) 主要内容四个文件:下面分别说下每个 ...
- 替换 wcf 消息传输中的 命名空间
替换 wcf 消息传输中的 命名空间,http://vanacosmin.ro/Articles/Read/WCFEnvelopeNamespacePrefix