JS预解析,作用域
2016-06-28 16:26
190 查看
”JS解析器“需知道的两大步工作:
(1)找一些东西:var function 参数a=未定义
所有的变量,在正式运行代码之前,都提前赋了一个值:未定义;
fn1=function fn1(){alert(2);}
所有的函数,在正式运行代码之前,都是整个函数块。
注:遇到重名的:只留一个(变量和函数重名,只留下函数;函数和函数重名,留下后来的一个)
(2)逐行解读代码:
表达式: = + - * / % ++ – ! 参数
注:表达式可以修改预解析的值
例题:
<script> alert(a); //结果为function a(){alert(5);} var a=1; alert(a); //1 function a(){alert(3);} //不执行 alert(a); //1 var a=3; alert(a); //3 function a(){alert(5);} //不执行 alert(a); //3 a(); //如果此时调用函数,就会报错,因为此时a的类型是number </script>
JS解析过程:
(1)找:
a=未定义;(第一步找到一个变量)
function a(){alert(3);}(第二步找到一个函数,此时就会只存这个函数,变量就不在这里了)
var a=3;(变量和函数存在时,留函数,所以此时还是上面那个函数)
function a(){alert(5);}(顺序,存后来的函数)
经过上述一系列的变化,最终库里只剩下了 function a(){alert(5)};
(2)解读代码:
遇到表达式的时候会更改a 的值。
函数的作用域
(一)var a=1; function fn1(){ alert(a); //未定义 var a=2; } fn1(); alert(a); //1
(1)预解析:a=未定义;
function fn1(){
alert(a);
var a=2;
}
(2)逐行解读代码:
表达式
函数:(调用函数的时候首先去找函数内的各个值)
1)找一些东西:var function 参数 (此时会找到var a)
a=未定义
2)逐行解读代码:表达式
(二)
var a=1; function fn1(){ alert(a); //1 a=2; } fn1(); alert(a); //2
若上述代码去掉var:
运行到a=2时,就会改变全局的变量a=1的值。
(1)预解析:a=未定义;
function fn1(){
af81
alert(a);
var a=2;
}
(2)逐行解读代码:
表达式
函数:(调用函数的时候首先去找函数内的各个值)
1)找一些东西:var function 参数 (此时未找到a)
a=未定义
2)逐行解读代码:表达式
(三)
var a=1; function fn1(a){ alert(a); //1 a=2; } fn1(); alert(a); //2
若加入参数a,
(1)预解析:a=未定义;
function fn1(a){
alert(a);
var a=2;
}
(2)逐行解读代码:
表达式
函数:(调用函数的时候首先去找函数内的各个值)
1)找一些东西:var function 参数 (此时会找到参数a)
a=未定义
2)逐行解读代码:表达式
相关文章推荐
- MulLine.js 使用说明
- JSON
- js毫秒时间转换成日期时间
- js禁止页面刷新与后退的方法
- jni jstring 、char* 类型的转换
- Jsonp接口
- 4.2、JS——var 数据类型 节点标签属性操作 动态获取方法
- Xml和json接口
- js实现异步跨域上传
- HTML5使用JavaScript控制<audio>音频的播放
- 26、js阶段性复习
- JSP错误页面的处理和exception对象
- JS中this指向
- JS window.onload 和模拟document.ready.
- OC 与JS 交互
- JavaScript里最有效率的功能特征检测方法
- javascript中encodeURI和decodeURI方法
- js 判断字符串是否包含某字符串,String对象中查找子字符indexOf,查找字符串出现的次数split
- Swiper.js使用方法
- js日期格式转换