IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 白嫖都不来看一眼?---JavaScript预解析 -> 正文阅读

[JavaScript知识库]白嫖都不来看一眼?---JavaScript预解析

预解析

在这里插入图片描述

在这里插入图片描述


一、 预解析

1.1、概述

  1. JavaScript 代码的执行是由浏览器中的 JavaScript 解析器来执行的
  2. JavaScript 解析器执行 JavaScript 代码的时候,分为两个过程:预解析过程和代码执行过程
  3. 预解析分为变量预解析(变量提升)和函数预解析(函数提升)
  4. 代码执行是按代码的书写顺序从上到下执行的.

1.2、操作原理

  1. 预先读取JavaScript中的所有程序内容,找到所有 var 和 function 关键词 来进行预解释和预解析
  2. 告诉计算机程序,有哪些变量是使用 var 关键词声明
  3. 如果提前使用 var 声明的变量,告诉计算机程序,这个变量已经存在,只是当前没有赋值,执行结果是undefined,不会报错
  4. 如果是使用function 声明的函数,告诉计算机程序,这个函数已经存在,并且告诉计算机这个函数的内存地址,可以正常调用使用这个函数。

在这里插入图片描述

二、变量预解析

  • 变量预解析就是把所有的变量声明提升到当前作用域的最前面,不提升赋值操作
    例如:
	console.log(num);
        var num = 10;

        // 相当于执行
        var num;
        console.log(num);//undefined
        num = 10;

三、函数预解析

  • 函数预解析就是把所有的函数声明提升到当前作用域的最前面,不调用函数
  • 用function关键字声明的函数遵循函数预解析规则,会提升该函数声明
  • 使用变量接收函数的函数表达式的声明方式,会提升该变量的声明,但是该变量此时还没有接收函数,使用变量名调用函数会报错
  • 函数表达式调用必须写到函数表达式的下面

例如:

		var num = 10;
        fun();
        function fun() {
            console.log(num);
            var num = 20;
        }
        // 相当于执行
        var num;
        function fun() {
            var num;
            console.log(num);
            num = 20;
        }
        num = 10;
        fun();  //结果是 undefined

四、预解析案例

案例1:

 var a = 25;
        function abc() {
            alert(a);            //结果是 undefined
            var a = 10;
        }
        abc();

预解析结果:

    var a;                   // 在全局作用域里提升变量
        function abc() {         // 在全局作用域里提升函数
            var a;                 // 在局部作用域里提升变量
            alert(a);           //  a 的值是 undefined
            a = 10;                // 在局部作用域里给变量赋值
        }
        a = 25;                  // 给变量赋值
        abc();                   // 调用函数

案例2:

console.log(a);
        function a() {
            console.log('aaaaa');
        }
        var a = 1;
        console.log(a);

预解析结果:( 在预解析的过程中如果函数和变量的名字相同,此时函数优先 )

      var a;                            //全局作用域里提升变量
        function a() {                    //全局作用域里提升函数
            console.log('aaaa');
        }

        console.log(a);                  // 输出函数 a  在预解析的过程中如果函数和变量的名字相同,此时函数优先
        a = 1;                           // 给变量赋值
        console.log(a);                  // 输出变量 a

案例3:

       var a = 18;
        f1();
        function f1() {
            var b = 9;
            console.log(a);
            console.log(b);
            var a = '123';
        }

预解析结果:

 var a;               // 全局作用域中提升变量
        function f1() {      // 全局作用域中提升函数
            var b;             // 局部作用域中提升变量
            var a;             // 局部作用域中提升变量
            b = 9;             // 局部作用域中给变量赋值
            console.log(a);    // a 的值为 undefined
            console.log(b);    // b 的值为  9
            a = '123';         // 局部作用域中给变量赋值
        }
        a = 18;              // 全局作用域中给变量赋值
        f1();                // 调用函数


在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-23 12:23:03  更:2021-10-23 12:23:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 9:31:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码