美文网首页
Js 预解析

Js 预解析

作者: 前端狗 | 来源:发表于2015-08-19 01:23 被阅读2168次

突然感觉简书很便,不就是学习记录嘛。何必要费力不讨好的写自己的bolg,而且还是一个不会后台的前端狗。

今天本来是要看作用域的,不知怎么就稀里糊涂的学习了一边预解析,下面给朋友们介绍一下我对 js 预解析的理解。

//示例 1
alert(a)       // undefind。
alert(fn)      // function 整个函数块。

var a = 1;
function fn(){ 
    return falss;
};

为什么?第一个是 undefind , 第二个是 functin 函数块。这是怎么运行的?这就要 稍微介绍一下 js解析器的运行方法。扩展:什么事js解析器

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

  1. 第一步 把所有的 变量函数参数 提前到当前作用域的顶部。
  2. 第二步 逐行解读代码 从左到右从上至下
  • 表达式:= + - * / % ++ -- ! 参数 ...
    表达式 可以修改 预解析后的值

示例 1 的解析方式:

//示例 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;
};                  //  函数 一直没变只不过被提前的 作用域 前面了。我记着有句话是这样说的:
                    //  函数在那定义 不重要 重要的是在那调用。
                    // (因为定义完以后它都会被提前到 当前 作用域 的前面,在那调用 在哪个作用域生效)

不知道我写到这,上面的内容能不能被理解。如果在阅读过程中 遇到任何问题,或错误,请及时评论指出 我会及时做出 修正或更改。

上面都是前戏,现在才开始。 = =!

现在来个稍复杂的示例:

// 示例 3 

alert(a);         // a 函数块。
var a = 1;
alert(a)          // a 赋值后 等于 1。
function a(){
    return false;
}

现在是不是感觉整个人都不好了。我来给大家解释一下 示例 3 的解析过程:

// 示例 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。

2015年8月19日01:20:54 我先睡觉。

我是不是应该加一句话阿?
本人不才。此为学习笔记。仅供参考!

相关文章

  • JS预解析

    JS解释器运行JS分为两步:预解析、代码执行 预解析 JS解释器会把JS里面所有的var和function提升到当...

  • 预解析

    预解析是什么? 官方式: 预解析就是提前把变量或函数预先解析到它们被使用的环境中 聊天式: 预解析就是浏览器的js...

  • 预解析

    预解析: 在代码中,首先会预先解析一些(变量定义、函数会预解析); var a=12; js只把var a提到作用...

  • 学习笔记

    预解析1. js引擎在js代码正式执行之前会做一些预解析的操作2. 先找关键字var,function3. 找到v...

  • JS预解析

    请问如下代码输出结果是啥:

  • js预解析

    首先来一个简单的代码: 那么结果是什么呢?我本来以为是undefined、10、function a() { va...

  • Js 预解析

    突然感觉简书很便,不就是学习记录嘛。何必要费力不讨好的写自己的bolg,而且还是一个不会后台的前端狗。 今天本来是...

  • JS预解析

    javascript代码是通过浏览器中的javascript解析器来执行的,javascript解析器在运行jav...

  • js小知识点(预解析 引用 异常 严格模式)

    预解析:会预先解析一些(变量定义、函数会预解析);var a=12;只把var a提到作用域的顶部js会把变量的声...

  • day05-JS运行和编译

    1.JS运行和编译 1.1语法分析:查找基本语法有没有错误 1.2 预解析:执行之前进行预解析 ...

网友评论

      本文标题:Js 预解析

      本文链接:https://www.haomeiwen.com/subject/apqgqttx.html