js预解析问题总结
//示例 1
alert(a) // undefind。
alert(fn) // function 整个函数块。 var a = 1;
function fn(){
return falss;
};
为什么?第一个是 undefind
, 第二个是 functin
函数块。这是怎么运行的?
js解析器在运行js代码的时候 分为两步:
- 第一步 把所有的
变量
、函数
、参数
提前到当前作用域的顶部。 - 第二步 逐行解读代码
从左到右
、从上至下
。
//示例 1 解释
var a; // a 变量 提前到整个作用域的前面 当前值 为 undefind。
function fn(){
return false;
}; // fn 函数 提前整个作用域的前面 当前值 就是整个函数块。 alert(a); // undefind。
alert(fn); // function 整个函数块。
a=1; // a 赋值 1 现在 a 变量才拥有 值:1
function fn(){
return false;
}; // 函数 一直没变只不过被提前的 作用域 前面了。我记着有句话是这样说的:
// 函数在那定义 不重要 重要的是在那调用。
// (因为定义完以后它都会被提前到 当前 作用域 的前面,在那调用 在哪个作用域生效)
tips:解析引擎以块为单位级别,执行所有Var变量的创建,并赋予一个初始值undefined。
// 示例 3 alert(a); // a 函数块。
var a = 1;
alert(a) // a 赋值后 等于 1。
function a(){
return false;
}
// 示例 3 解释 var a; // 首先提前 变量 当前值 为:undefind。
function a(){
return false;
}; // 遇到函数 提前函数 注意:当前函数命 和 上面的变量名 一样 竟然一样怎么办呢?
// 不要急 js解析器已经做了处理 同名的函数会替换掉 同名的 变量 现在就只剩下 a 函数块 自己了。 alert(a); // 因为 上面 只剩下 a 函数了 所以现在就弹出 a函数的整个函数块。
a = 1; // a = 1 表达式赋值 所以就又把 a 函数给替换成了 变量 值为:1。
alert(a); // 现在 弹出 的值就是被改变过的 a 值为 1;
function a(){ // 这个函数现在就没用了。
return false;
};
带参数的预解析方式:注意此处就有了作用域的问题了
//示例 4
var a = 1;
function fn1(a){
alert(a);
a = 2;
};
fn1(); // undefind。
alert(a); // a 值为: 1。
//示例 4 解释
var a; // a 变量 提前 当前值:undefind。(全局变量)
function fn1(a){
alert(a);
a = 2;
}; // fn1 函数块提前 值为: 整个函数
// 该提前的都提前的现在开始 逐行 解读代码,
// 等等 有人会说那 参数 呢? 哈哈哈 不要着急还没到它呢。 var a = 1; // a = 1 赋值表达式 改变 变量 a 值为:1。
function fn1(a){
var a; //参数被当成变量 解析到当前函数 顶部。
alert(a); // a 当前函数内 a 值为:undefined.
a = 2; // a = 2 复制表达式 无用
}; // 函数块 没有遇到调用 无用。
fn1(); // 现在遇到函数fn1 的调用了 咱们就去它里面看看 。
// 调用成功后 弹 undefind。
alert(a); // 这个 还是调用 全局的变量 a 值 为 1。
js预解析问题总结的更多相关文章
- js预解析相关知识总结以及一些好玩的面试题
js预解析的题像在做智力题一样有意思~ 预解析 预解析:在解释这行代码之前发生的事情——变量的声明提前了,函数的声明提前 console.log(num) ——未定义Num,结果是报错 var num ...
- js预解析及特效
预解析: // 作用域: // 域:空间.范围.区域…… // 作用:读.写 script 全局变量.全局函数 自上而下 函数 由里到外 {} 浏览器: “JS解析器” 1)“找一些东西” :var ...
- JS预解析
1.在逐行读js代码前,解析器会先提取所有声明的var变量和函数 js解析器会先把脚本里所有var变量声明读一遍,但是它只读变量名字,不读变量值,一开始它会赋给所有读到的var变量一个[未定义]的值. ...
- [妙味JS基础]第六课:作用域、JS预解析机制
知识点总结 浏览器的解析方法 script 全局变量,全局函数 自上而下 函数 由里到外 "JS的解析器": 1)“找一些东西”:var function 参数 var a=未定义 ...
- javascript . 03 函数定义、函数参数(形参、实参)、函数的返回值、冒泡函数、函数的加载、局部变量与全局变量、隐式全局变量、JS预解析、是否是质数、斐波那契数列
1.1 知识点 函数:就是可以重复执行的代码块 2. 组成:参数,功能,返回值 为什么要用函数,因为一部分代码使用次数会很多,所以封装起来, 需要的时候调用 函数不调用,自己不会执行 同名函数会覆盖 ...
- JS预解析机制
JS的预解析过程: 1,预解析 2,再逐行解读代码, 实例: ---------------------------- <script> var name="xm& ...
- js 预解析
前言 JavaScript是解释型语言是毋庸置疑的,但它是不是仅在运行时自上往下一句一句地解析的呢? 事实上或某种现象证明并不是这样的,通过<JavaScript权威指南>及网上相关资料了 ...
- js---07 js预解析,作用域---闭包
js解析器首先不会逐行读代码,这是第二部了. 首先 根据var找到变量,根据function找函数,找到变量var a = 1,js解析器只会读取等号前面的var a,并把a设置值未定义,并不会读取等 ...
- js 预解析以及变量的提升
js在执行之前会进行预解析. 什么叫预解析? 预:提前 解析:编译 预解析通俗的说:js在执行代码之前会读取js代码,会将变量声明提前. 变量声明包含什么?1.var 声明 2.函数的显示声明. 提前 ...
随机推荐
- Ubuntu文件的复制、移动和删除命令
先说说cp复制命令 该命令的功能是将给出的文件或文件夹复制到还有一文件或文件夹中,同MSDOS下的copy命令一样,功能十分强大. 语法: cp [选项] 源文件或文件夹 目标文件或文件夹 说明:该命 ...
- 具体解释首页被K后SEOer必做的三大排除方法!
近段时间.有非常多朋友向新辰抱怨说出大问题了,为神马site不到首页了,并且收录变成了0?唉,新辰不得不非常同情的告诉你:你的首页真的被K了!好了.作为一个职业SEOer.面对被K宛如已经看破红尘般没 ...
- c++读取文本文件
#include<iostream> #include<fstream> using namespace std; int main() { int a,b=-100000,c ...
- SOA两个接口通常用于实现更:SOAP vs REST
SOA协作架构异构系统,因此,一个跨操作系统的需求.跨语言的通用信息交换格公式. SOAP和REST它们是基于消息正文文本,在跨平台方面相比二进制消息优点.因此,作为选择SOA实施通常用于界面.但SO ...
- solaris X86-64下一个ORACLE战斗11.2.0.3.8在一波折叠补丁
solaris X86-64下一个ORACLE战斗11.2.0.3.8补丁: 正确的步骤: 1.BUG6880880 .OPATCH补丁 2.BUG16902043.11.2.0.3.8补丁 情感是练 ...
- 恢复SQLSERVER被误删除的数据
原文:恢复SQLSERVER被误删除的数据 恢复SQLSERVER被误删除的数据 曾经想实现Log Explorer for SQL Server的功能,利用ldf里面的日志来还原误删除的数据 这里有 ...
- linux下面的中断处理软件中断tasklet机制
參考: <Linux内核设计与实现> http://blog.csdn.net/fontlose/article/details/8279113 http://blog.chinaunix ...
- HTTP的REST服务简介
REST简介 一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么, ...
- 我也来谈javascript高级编程之:javascript函数编译过程
前言 题目有点大,其实也就是手痒...跟大家来扯一下javascript编译过程. 那么到底什么是“编译”呢 这个...本人文笔太差,我还是直接举例子吧. 相信玩过js童鞋应该都看过下面这样一个面试题 ...
- android_Activity生命周期功能
说明:初步activity 生命周期7功能. 样本:于MainActivity我加了button,搬家button.跳到OtherActivity.控制台输出的观察. 让我们来看看这些功能: 他们的流 ...