预解析练习题及解析

 

1

[JavaScript] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

function func1 ( num ) {

  console.log( num );

  var num = 456;

  console.log( num );

}

var num = 123;

func1( num );

 

//分析

//1. 进行预解析,观察声明有两个,一个函数声明func1,一个是变量声明var num

//    func1被预解析记录,并与函数体相连

//    var num 被记录

//2. 预解析结束,开始执行代码

//    执行第一句话为:num = 123,对num进行赋值

//    调用func1( num );

//    在进入函数体前,开辟函数内存需要的内存空间,将函数的参数var num = 123进行声明

//    进入函数体,开始执行预解析,观察到有个var num,重复声明,忽略

//    执行函数体,第一个console.log( num ) => 123

//    num = 456,对num进行赋值

//    第二个console.log( num ) => 456

//    函数执行结束,回到外层




2

[JavaScript] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

function func2 () {

  console.log( num );

  var num = 456;

  console.log( num );

}

var num = 123;

func2( num );

 

//分析

//1. 进行预解析, 观察到有两个声明, func2和var num

//   func2被记录,并与函数体相连

//   var num被记录

//2. 预解析结束,开始执行代码

//    执行num = 123,对num进行赋值

//    调用func( num )

//    进入函数体,进行预解析, 记录var num

//    执行第一个console.log( num ) => undefined

//    执行赋值语句, num = 456

//    执行第二个console.log( num ) => 456



3

[JavaScript] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

function func3 () {

  console.log( num );

  num = 456;

  console.log( num );

}

var num = 123;

func3( num );

console.log( num );

 

//分析

//1. 进行预解析, 观察到有两个声明,func3和var num

//    func3被记录,并与函数体相连

//    var num被记录

//2. 预解析借宿,开始执行代码

//   num = 123,进行赋值

//   调用func3( num )

//    进入函数体,进行预解析,无需要记录对象,预解析结束

//    执行第一个console.log( num ) => 此时函数的局部作用域内无num,向全局中找,全局num = 123 => 123

//    num = 456,进行赋值操作 => 更改全局中的num = 456

//    执行第二个console.log( num ) => 456

//    函数执行完毕,执行第三个console.log( num ) => 456

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值