预解析详解

预解析

解释

​ 1. 在所有代码开始执行之前, 对代码进行通读并解释, 解释完毕以后再开始执行代码

2. 函数调用问题

​ (1) 在函数定义的时候, 被装进 “盒子” 内的代码是不会执行的

​ (2)在函数调用的时候, 代码才会执行

​ (3) 预解析有两部分

​ <1>全局预解析: 打开页面的时候, 会对全局代码进行预解析, 但是函数体内的代码不管

​ <2> 局部预解析: 当你函数调用的时候, 会在函数的私有作用域内进行预解析, 解析完毕执行函数体内的代码

预解析都解释哪些内容:

​ 1. var

​ 2.声明式函数

var 的预解析

1. 向浏览器内存声明, 有一个变量被定义了, 但是没有赋值
   2. 赋值操作是在代码执行阶段才会执行的

分析:

​ 1. 当你使用一个变量的时候

​ 2. 如果报错: xxx is not defined, 说明这个变量没有定义

​ 3. 如果出现 undefined 说明这个变量定义过, 但是没有赋值

预解析 - function

  1. 声明式函数会进行预解析

  2. 当代码发现声明式函数的时候

​ (1) 会在浏览器内存中声明变量名(函数名), 并且被赋值为一个函数

  1. 赋值式函数(函数表达式)

​ (1) 按照 var 的规则执行

预解析的重名问题

​ 1. 当代码中 函数名 和 变量名 重名时候

​ 2.以函数为准, 仅仅只是在预解析中

​ 3.不要把函数名和变量名重名

函数内的预解析

预解析教会了我们什么

​ 1. 函数名和变量名不要重名

​ 2. 不管是函数还是变量, 进行先声明后使用

​ 3.在函数内, 不要定义和形参一样的函数名

函数的两个阶段都做了什么

函数定义阶段

​ 1. 在堆内存中开辟一段存储空间

​ 2.把函数体内的代码当做 字符串 放在开辟出来的存储空间内

  1. 把函数名放在栈内存中, 把堆内存中的空间地址赋值给栈内存的变量

函数调用阶段

​ 1. 按照栈内存中变量存储的地址找到函数的存储空间

​ 如果这个空间不是一个函数存储空间, 那么直接报错 xxx is not a function

​ 2. 在调用栈中开辟一段新的 函数执行空间

​ 把函数存储空间内的形参, 代码全部复制过来

3.在这个执行空间内, 进行形参的赋值

​ 赋值是在函数调用空间内执行的

4.在这个执行空间内, 进行函数内代码的预解析

​ 对函数体内存储的一段字符串进行通读并解释

5.把函数体内的 字符串, 当做 js 代码来执行

​ (1) 如果是合法的 js 代码, 那么直接执行

​ (2) 如果不合法, 此时才会报错

6.代码执行完毕以后, 此次开辟的函数执行空间销毁

变量的赋值

把一个变量内存储的数据百分之百的复制一份给到另一个变量

在函数的调用过程中

​ 1. 先形参赋值 还是 先预解析

​ 2. 结论: 先形参赋值后预解析

​ (1) 不要在函数内定义和形参一样的函数名

​ (2) 这样你的形参就没有意义了

记住

this : 不管函数在哪定义, 不管函数怎么定义, 直接去看怎么调用的

变量 : 不管函数怎么调用, 就按照定义位置去逐层查看

面试题1

 var a = b = 10
     a = 20
     b = 20
     console.log(a)
     console.log(b)

预解析:

在浏览器定义了一个叫做 a 的变量

代码执行:

​ b = 10

​ (1) 涉及到的叫做变量赋值机制

​ (2) 直到全局都没有 b 这个变量, 把 b 定义为全局变量, 在进行赋值

​ a = b

​ (1) 因为 b = 10 的执行, 导致全局有了 b 变量

​ (2) 把 b 变量保存的值赋值给 a

​ (3) 此时 a 也是 10

​ …

面试题2

 var a = b
     a = 20
     b = 20
     console.log(a)
     console.log(b)

预解析:

​ 在浏览器定义了一个叫做 a 的变量, 没赋值

代码执行:

​ a = b,

​ (1)访问 b 变量的值赋值给 a

​ (2) 涉及变量访问机制, b 没有定义过, 报错

​ (3) b is not defined

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值