「这是我参与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中的所有程序内容,找到所有 var 和 function 关键词 来进行预解释和预解析
告诉计算机程序,有哪些变量是使用 var 关键词声明
如果提前使用 var 声明的变量,告诉计算机程序,这个变量已经存在,只是当前没有赋值,执行结果是undefined,不会报错
如果是使用function 声明的函数,告诉计算机程序,这个函数已经存在
并且告诉计算机这个函数的内存地址,可以正常调用使用,这个函数
这个图片 ,提前执行fun3 结果是undefined;提前执行fun3() 结果是报错
三.预解析的无底线操作
预解析/预解释的无下限操作
只要是写在程序中的 var 和 function关键词,都会被预解析
(不管程序会不会被执行,都会执行预解析)
如果是不执行的程序, 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(); → 报错