JavaScript预解析
定义:JavaScript”预解析”,可以理解为把变量或函数预先解析到它们被使用的环境中。
通俗点讲,即认为浏览器在正式运行JavaScript代码前,
第一步,会预先根据关键字var、function等,来查找一些需要被解析的东西,
例如:var a = 1; function test(){ alert(2); };
第二步,给这些需要被解析的东西提前赋值,其中包括:
⑴ 所有的变量,提前赋值:undefined;
⑵ 所有的函数,在正式运行代码前,都赋值为整个函数块。
第三部,“预解析”结束后,浏览器再逐行解读代码,并通过表达式:= + - * -- ++ !等来修改这些“预解析”的值。
二、解析原则
1. JavaScript “预解析”过程中,遇到重名的内容,只保留一个:
⑴ 重名变量或重名函数,保留最后的一个;
⑵ 变量和函数重名,只保留函数;
2. 根据作用域链,来查找上文第一步中提到的需要被解析的东西
查找原则:从上到下,从里到外
即先找局部作用域里找,然后子对象会一级一级向上寻找所有父对象的变量。
案例:
alert(a); // function a(){alert(4);}
var a=1;
alert(a); // 1
function a(){alert(2);}
alert(a); // 1
var a=3;
alert(a); // 3
function a(){alert(4);}
alert(a); // 3
1、每个var、funciton都会被预解析,var被预解析为undefined,function被预解析为它本身(不过是以字符串形式)
2、这里面有两个function a,只保留最后一个,即第二个function a(){alert(4);}
3、这里面有一个变量a,名字和function重合了。变量与函数重名,只保留函数。所以第一个变量a最后被预解析为 function a(){alert(4);}
JavaScript预解析的更多相关文章
- JavaScript 预解析机制
首先我们来看一段代码: <script> console.log(a); var a = 10; </script> 此时运行结果为 为什么会显示undefined呢?这就 ...
- javascript预解析和作用域
JavaScript解析过程分为两个阶段: 一是:编译阶段.就是JavaScrip预解析阶段,在这个阶段JavaScript解析器将完成把JavaScript脚本代码转换到字节码; 二是:执行阶段.在 ...
- Javascript预解析、作用域、作用域链
最近在看js的一些资料,总结一下昨晚看到的js作用域方面的知识,不准确的地方希望留言指正! 先看片段js代码如下: < script type="text/javascript&quo ...
- javascript 预解析
内容来源:http://www.cnblogs.com/TomXu/archive/2011/12/28/2286877.html JavaScript中,你可以在函数的任何位置声明多个var语句,并 ...
- 轻松搞定javascript预解析机制(搞定后,一切有关变态面试题都是浮云~~)
hey,guys!我们一起总结一下JS预解析吧! 首先,我们得搞清楚JS预解析和JS逐行执行的关系.其实它们两并不冲突,一个例子轻松理解它们的关系: 你去酒店吃饭,吃饭前你得看下菜谱,点下菜(JS预解 ...
- JavaScript预解析1
var 不一定是用来定义局部变量的 jscript的全局变量和局部变量的分界是这样的: 过程体(包括方法function,对象Object o ={})外的所有变量不 ...
- 轻松搞定javascript变量(闭包,预解析机制,变量在内存的分配 )
变量: 存储数据的容器 1.声明 var 2.作用域 全局变量. 局部变量. 闭包(相对的全局变量): 3.类型 a.基本类型(undefi ...
- 从var func=function 和 function func()区别谈Javascript的预解析机制
var func=function 和 function func()在意义上没有任何不同,但其解释优先级不同:后者会先于同一语句级的其他语句. 即: { var k = xx(); function ...
- 第112天:javascript中函数预解析和执行阶段
关于javascript中的函数: 1.预解析:把所有的函数定义提前,所有的变量声明提前,变量的赋值不提前 2.执行 :从上到下执行,但有例外(setTimeout,setInterval,aja ...
随机推荐
- CSS position属性 标签: css 2016-09-06 15:58 78人阅读 评论(0) 收藏
踩了position的坑,主要是因为对position属性理解不深. 以下是w3school中对position的解释: 可能的值 值 描述 absolute 生成绝对定位的元素,相对于 static ...
- TC9.0新增实用接口,用AutoHotkey获取当前选中文件等信息
TC9.0的history.txt里有几行更新说明(见文章末尾),可以用SendMessage命令获取信息, 消息号是WM_USER+50(即1074),wParam则是更新说明里的内容, 下面是我简 ...
- 设置C++ cout输出精度
cout.precision(5); 数字表示小数点位数 // modify precision #include <iostream> // std::cout, std::ios in ...
- Mac iTerm2使用总结
1.快捷键大全新建标签:command + t关闭标签:command + w切换标签:command + 数字 command + 左右方向键切换全屏:command + enter查找:comma ...
- JavaScript小游戏--翻牌记忆游戏
翻牌记忆游戏源码 1.有8张图片,每张图片要放两次,生成如下数组,长为16,[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7] 其中两两相同的代表两张相同的图片,0对应文件夹image ...
- 调节Ubuntu分辨率
列出当前支持的分辨率 使用 xrandr 命令新增显示模式 至此分辨率更改完成 重启后会失效 在 ~/.profile 最末尾添加修改分辨率的命令
- Mybatis 和Spring整合之原始dao开发
F:\Aziliao\mybatis\代码\31.mybatis与spring整合-开发原始dao 1.1. SqlMapConfig.xml <?xml version="1.0&q ...
- sort论文和代码解读
流程:1.detections和trackers用匈牙利算法进行匹配 2.把匹配中iou < 0.3的过滤成没匹配上的(1.2步共同返回匹配上的,没匹配上的trackers,没匹配上的detec ...
- ListView 中嵌套 GridView
1.主布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...
- IBAction作用相当于void,NSLog(@"被调用的方法名是%s",__func__);
IBAction作用相当于void,NSLog(@"被调用的方法名是%s",__func__);