JS-JavaScript预解析及其无底线操作

410 阅读3分钟

「这是我参与11月更文挑战的第29天,活动详情查看:2021最后一次更文挑战

一.函数的执行原理

函数执行时,程序的基本执行过程和原理

函数的 定义/封装 阶段

1,在内存中开辟一个存储空间,并且定义内存地址

2,定义函数的程序内容,存储在这个内存地址,表示的空间中
此时程序没有被执行,以字符串的形式来存储

3,将内存地址存储在 变量名称 / 函数名称中

函数的调用阶段

1,读取变量名称/函数名称中存储的内存地址

2,通过内存地址,找到对应的函数程序

3,给函数程序中的参数,进行赋值

4,预解析 / 预解释

5,执行函数中存储的程序代码

后续还要再丰富

二.JavaScript的预解析

JavaScript的预解释/预解析
    JavaScript 是 弱类型 解释型 的 脚本语言
    JavaScript 是 解释型 计算机语言 在 程序执行之前,会先将定义的程序,预先解释,也就是预先模拟执行一遍
        //     会找程序中的关键词 var  function 两个关键词

先输出(提前调用)
如果是没有使用 var 关键词声明的变量,执行结果是会报错 
如果使用 var 关键词声明的变量,执行结果是 undefined 

如果是报错,之后的所有程序,都不会执行
如果是 undefined 之后程序还可以继续执行

实际项目中,会有这样提前使用变量的操作
如果不是使用 var 声明的变量,会报错,整个程序就无法进行了
     console.log(int);    →   undefined
后定义变量
        var int = 100;

console.log('我是之后的其他程序');

fun();    →  正常调用函数
function fun(){
    console.log(123);
}
这个效果,也就是使用var 定义的 变量,可以先调用,结果是undefined,不会报错
        使用 function 声明的 函数,可以先调用,后执行,能正常调用函数

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

在这里插入图片描述

这个图片 ,提前执行fun3 结果是undefined;提前执行fun3() 结果是报错

三.预解析的无底线操作

预解析/预解释的无下限操作
只要是写在程序中的 varfunction关键词,都会被预解析
(不管程序会不会被执行,都会执行预解析)
如果是不执行的程序, var 会 进行预解析,如果提前使用,结果是undefined
如果是函数, function 会预解析,但是不执行的函数,不能调用的

函数不能调用的原因:预解析会执行,也会存储内存地址
但是程序不执行,这个内存地址中就没有内容,执行结果会报错
console.log(int);    →  undefined
// fun();   →  报错

if(false){
    // 当if判断,条件执行结果是true时,才会执行程序
    // 如果条件执行结果是false,var int = 100 是不会执行的
    var int = 100; 

    function fun(){
        console.log(123);
    }
}

console.log(int);    →   undefined 
fun();   →  报错