跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 卖家故事 > 【JavaScript】预解析 ② ( 预解析示例分析 | 分步骤分析预解析过程 )

【JavaScript】预解析 ② ( 预解析示例分析 | 分步骤分析预解析过程 )

时间:2024-04-12 19:35:38 来源:网络cs 作者:付梓 栏目:卖家故事 阅读:

标签: 分析  过程  步骤  示例 
阅读本书更多章节>>>>

文章目录

一、预解析示例分析一1、要分析的代码2、代码预解析分析3、作用域链分析 二、预解析示例分析二1、要分析的代码2、代码预解析分析 三、预解析示例分析三1、要分析的代码2、预解析过程分析





一、预解析示例分析一




1、要分析的代码


要分析的 代码示例 :

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <!-- 设置 meta 视口标签 -->    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no,maximum-scale=1.0,minimum-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>JavaScript</title>    <style></style>    <script>        // 预解析示例        var num = 666;        fun();        function fun() {            console.log(num);            var num = 888;        }    </script></head><body></body></html>

执行结果如下 :

在这里插入图片描述


2、代码预解析分析


给定如下代码 , 分析 JavaScript 预解析过程 ;

        var num = 666;        fun();        function fun() {            console.log(num);            var num = 888;        }

分析上述代码 的 预解析过程 :

全局作用域 的 var num = 666; 变量 , 进行 预解析 , 提升该变量 到 全局作用域 顶部 , 提升后的效果如下 :

// ★ 本步骤要点var num;        num = 666;        fun();        function fun() {            console.log(num);            var num = 888;        }

全局作用域 的 fun 函数 预解析 , 将该函数 提升到 全局作用域 最顶部 , 在 var num 的下方 ;

var num;// ★ 本步骤要点        function fun() {            console.log(num);            var num = 888;        }        num = 666;        fun();

fun 函数 的 局部作用域 中的 var num = 888; 变量 进行 预解析 , 将该 变量 在 局部作用域 中 提升到 最顶端 ;

该提升操作 , 也是只提升变量声明 , 变量 初始化赋值 操作 仍然保留在原地 ;

var num;        function fun() {        // ★ 本步骤要点        var num;            console.log(num);            num = 888;        }        num = 666;        fun();

这是 JavaScript 预解析 的最终 结果 ;


3、作用域链分析


预解析结果如下 :

var num;        function fun() {        var num;            console.log(num);            num = 888;        }        num = 666;        fun();

在 fun 函数的 局部作用域中 , 执行 console.log(num); 代码 , 打印 num 变量的值 ,

num 变量查找 , 需要沿着 上述 JavaScript 代码的 作用域链 逐层 向上查找 ,

优先 查找 局部作用域 num 变量 , 然后再向上 查找 全局作用域 中的 num 变量 ;


在 fun 函数 的 局部作用域 中 , 找到了 num 变量 , var num; , 但是 该 num 变量 只进行了 声明 , 没有进行初始化 操作 ,

在 num 变量 声明后 , 未初始化前 , 打印 num 的值为 undefined ;





二、预解析示例分析二




1、要分析的代码


要分析的 代码示例 :

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <!-- 设置 meta 视口标签 -->    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no,maximum-scale=1.0,minimum-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>JavaScript</title>    <style></style>    <script>        // 预解析示例        var num = 666;        fun();        function fun() {            var num2 = 333;            console.log(num);            console.log(num2);            var num = 888;        }    </script></head><body></body></html>

执行结果 :

在这里插入图片描述


2、代码预解析分析


给定如下代码 , 分析 JavaScript 预解析过程 ;

        var num = 666;        fun();        function fun() {            var num2 = 333;            console.log(num);            console.log(num2);            var num = 888;        }

先 预解析 全局作用域的 num 变量 , 将 var num; 提升到 全局作用域最顶端 , num 变量初始化仍然留在原地 , 完成后代码变为 :

// ★ 本步骤要点        var num;        num = 666;        fun();        function fun() {            var num2 = 333;            console.log(num);            console.log(num2);            var num = 888;        }

然后 将 fun 函数声明 , 提升到 全局作用域 顶端 , 全局 num 变量声明 的 下面 ;

        var num;        // ★ 本步骤要点        function fun() {            var num2 = 333;            console.log(num);            console.log(num2);            var num = 888;        }        num = 666;        fun();

再后 对 fun 函数 局部作用域 的 num2 和 num 进行预解析 , 将 变量 声明 提升到 局部作用域 的顶端 , 将 变量 初始化赋值 留在原地 , 预解析后的结果如下 :

        var num;        function fun() {        // ★ 本步骤要点            var num2;            var num;            num2 = 333;            console.log(num);            console.log(num2);            num = 888;        }        num = 666;        fun();

在上述 fun 函数 局部作用域 , 打印 num 变量时 , 局部作用域 的 num 变量还没有 初始化 , 打印的值为 undefined , 打印 num2 变量时 , 局部作用域 的 num2 变量 已经赋值 333 , 因此执行结果如下 :

在这里插入图片描述





三、预解析示例分析三




1、要分析的代码


要分析的 代码示例 :

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <!-- 设置 meta 视口标签 -->    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no,maximum-scale=1.0,minimum-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>JavaScript</title>    <style></style>    <script>        // 预解析示例        fun();        console.log(num1);        console.log(num2);        console.log(num);        function fun() {            var num = num1 = num2 = 888;            console.log(num);            console.log(num1);            console.log(num2);        }    </script></head><body></body></html>

执行结果 :

在这里插入图片描述


2、预解析过程分析


预解析的代码 :

        fun();        console.log(num1);        console.log(num2);        console.log(num);        function fun() {            var num = num1 = num2 = 888;            console.log(num);            console.log(num1);            console.log(num2);        }

全局作用域 的 fun 函数预解析 , 将 该函数 提升到 全局作用域 的最顶端 ;

// ★ 本步骤要点        function fun() {            var num = num1 = num2 = 888;            console.log(num);            console.log(num1);            console.log(num2);        }                fun();        console.log(num1);        console.log(num2);        console.log(num);

下面分析 局部作用域的 var num = num1 = num2 = 888; 语句 , num1 和 num2 变量 没有经过声明直接使用 , 这两个变量等同于 全局变量 ;

这里将这两个变量 提升到全局作用域 的最顶端 ;

本步骤预解析结果如下 :

var num1;var num2;// ★ 本步骤要点        function fun() {            var num;             num2 = 888;            num1 = 888;             bnum = 888;            console.log(num);            console.log(num1);            console.log(num2);        }                fun();        console.log(num1);        console.log(num2);        console.log(num);

在 fun 函数内部 , 可以打印出 3 个变量的值 888 ;

在 全局作用域中 , 可以打印出 num1 和 num2 的值 888 , 但是 num 变量是 fun 函数的 局部变量 , 访问不到 , 因此 全局作用域 打印 num 变量会报错 ;

Uncaught ReferenceError: num is not defined    at hello.html:17:21

在这里插入图片描述

阅读本书更多章节>>>>

本文链接:https://www.kjpai.cn/gushi/2024-04-12/157767.html,文章来源:网络cs,作者:付梓,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论