//示例 1
alert(a) // undefind。
alert(fn) // function 整个函数块。 var a = 1;
function fn(){
return falss;
};

为什么?第一个是 undefind , 第二个是 functin 函数块。这是怎么运行的?

js解析器在运行js代码的时候 分为两步:

  1. 第一步 把所有的 变量函数参数 提前到当前作用域的顶部。
  2. 第二步 逐行解读代码 从左到右从上至下
//示例 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预解析问题总结的更多相关文章

  1. js预解析相关知识总结以及一些好玩的面试题

    js预解析的题像在做智力题一样有意思~ 预解析 预解析:在解释这行代码之前发生的事情——变量的声明提前了,函数的声明提前 console.log(num) ——未定义Num,结果是报错 var num ...

  2. js预解析及特效

    预解析: // 作用域: // 域:空间.范围.区域…… // 作用:读.写 script 全局变量.全局函数 自上而下 函数 由里到外 {} 浏览器: “JS解析器” 1)“找一些东西” :var ...

  3. JS预解析

    1.在逐行读js代码前,解析器会先提取所有声明的var变量和函数 js解析器会先把脚本里所有var变量声明读一遍,但是它只读变量名字,不读变量值,一开始它会赋给所有读到的var变量一个[未定义]的值. ...

  4. [妙味JS基础]第六课:作用域、JS预解析机制

    知识点总结 浏览器的解析方法 script 全局变量,全局函数 自上而下 函数 由里到外 "JS的解析器": 1)“找一些东西”:var function 参数 var a=未定义 ...

  5. javascript . 03 函数定义、函数参数(形参、实参)、函数的返回值、冒泡函数、函数的加载、局部变量与全局变量、隐式全局变量、JS预解析、是否是质数、斐波那契数列

    1.1 知识点 函数:就是可以重复执行的代码块 2.  组成:参数,功能,返回值 为什么要用函数,因为一部分代码使用次数会很多,所以封装起来, 需要的时候调用 函数不调用,自己不会执行 同名函数会覆盖 ...

  6. JS预解析机制

    JS的预解析过程: 1,预解析 2,再逐行解读代码, 实例: ---------------------------- <script>        var name="xm& ...

  7. js 预解析

    前言 JavaScript是解释型语言是毋庸置疑的,但它是不是仅在运行时自上往下一句一句地解析的呢? 事实上或某种现象证明并不是这样的,通过<JavaScript权威指南>及网上相关资料了 ...

  8. js---07 js预解析,作用域---闭包

    js解析器首先不会逐行读代码,这是第二部了. 首先 根据var找到变量,根据function找函数,找到变量var a = 1,js解析器只会读取等号前面的var a,并把a设置值未定义,并不会读取等 ...

  9. js 预解析以及变量的提升

    js在执行之前会进行预解析. 什么叫预解析? 预:提前 解析:编译 预解析通俗的说:js在执行代码之前会读取js代码,会将变量声明提前. 变量声明包含什么?1.var 声明 2.函数的显示声明. 提前 ...

随机推荐

  1. UVA 1364 - Knights of the Round Table (获得双连接组件 + 二部图推理染色)

    尤其是不要谈了些什么,我想A这个问题! FML啊.....! 题意来自 kuangbin: 亚瑟王要在圆桌上召开骑士会议.为了不引发骑士之间的冲突. 而且可以让会议的议题有令人惬意的结果,每次开会前都 ...

  2. FastJson基本使用

    在发展中Android的过程中.假设我们常与server联系,更新数据等,然后,json它必须是一个良好的数据格公式,但随着json.使用原生的解析也能够,可是非常不高效,所以这里介绍两种json数据 ...

  3. 关于Java和.NET之间的通信问题(JSON)

    前言: 最近项目在某XX领导的所谓指引下,非要转型Java,转就转吧,在转的过程前期是个痛苦期,特别.NET旧有项目和Java新项目需要通信时. 进入主题,Java和.NET之间需要通信,这时媒介很多 ...

  4. 字符串属性 NSMutableAttributedString/NSAttributedString

    因为iOS7新出的NSTextStorge是NSMutableAttributedString的子类.所以要用好NSTextStorage.首先要学好NSMutableAttributedString ...

  5. rabbitMQ说明文档

    rabbitMQ是什么 RabbitMQ     是由     LShift     提供的一个     Advanced Message Queuing Protocol (AMQP)     的开 ...

  6. 第12章 代理模式(Proxy Pattern)

    原文   第12章 代理模式(Proxy Pattern) 代理模式 概述: 在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要 ...

  7. Util

    Util最新代码更新说明   离上一篇又过去了一个月,时间比较紧,后续估计会更紧,所以这次将放出更多公共操作类及配套的CodeSmith模板,本篇将简要介绍新放出的重要功能,供有兴趣的同学参考. 重要 ...

  8. 实战parse_ini_file()及扩展函数解析ini文件完整版

    文章来源:PHP开发学习门户 地址:http://www.phpthinking.com/archives/587 在PHP站点开发的过程中,往往会用到读取ini參数配置文件,比方须要訪问一些复杂的借 ...

  9. ShellExecuteEx的使用方法

    关于怎样在c++中启动外部的exe程序,之前看到在百度一搜就看到了: ShellExecute(this->m_hWnd,"open","calc.exe" ...

  10. Host和Server的开发

    Host和Server的开发 对于开发人员来说,代码就是最好的文档,如上一篇博文所说,下面我们就会基于Kanata项目的一些具体调用代码,来进一步深入理解OWIN的实现和作用. 今天我们先针对Host ...