第一个a为什么是underfined

来源:2-6 选择题

JJJustin

2019-07-23 14:55:25

http://img.mukewang.com/climg/5d36af150001aca007000504.jpg

预解析的时候确实两个a都是underfined 但是程序按顺序执行的时候 全局变量a应该是赋值了111,然后再调用test()();方法把,那第一个a不是弹111吗

写回答

3回答

好帮手慕糖

2019-07-24

同学你好,函数内是这么执行的哦,弹出a之后就声明了var a =11;这个上面也说过了哦,

http://img.mukewang.com/climg/5d37b5410001f7d707390182.jpg

但是函数外的话,也是按照顺序执行的,先声明var a =111;然后往下调用函数。

http://img.mukewang.com/climg/5d37b58000012c7a06440444.jpg

希望能帮助到你,祝学习愉快!

0

好帮手慕糖

2019-07-23

同学你好,是先执行test哦。先弹出的也是test中的。

1、test()(),这里先执行test(),是调用了test这个函数,然后执行函数中的内容。

2、弹出a(因为这个函数中有var声明的a变量,所以不会往test函数外找了,这个函数中的a有在弹出的下面。所以弹出undefined)。

3、然后有声明a=11,函数是在调用的时候执行的,这里没有调用,所以不执行,然后执行下面的返回值。

4、返回了subtest这个,然后刚刚的test()调用得到了subtest,后面还有一个括号,就成了subtest()即调用了这个函数。

4、执行subtest这个函数中的内容,弹出a,该函数中var声明的a,会往这个函数外找,找到了test下面的a,然后弹出11,

http://img.mukewang.com/climg/5d36f1090001b4af06580486.jpg

希望能帮助到你,欢迎采纳。

祝学习愉快!

0
hJJustin
h 老师 我基本是明白了 还是还有一点既然test()();是先执行了test();方法 那里面的var a = 11;应该也执行呀 不是按顺序执行吗
h019-07-23
共1条回复

好帮手慕糖

2019-07-23

同学你好,函数内,若是有使用var声明的同名变量,就不会在往上(函数外)找了哦。所以弹出的是函数内的预解析的undefined。

希望能帮助到你,祝学习愉快!

0
hJJustin
h 老师我没动 当执行test()(); 走的是test的方法 还是subtest的方法,还有先弹test的框还是先弹subtest的框
h019-07-23
共1条回复

0 学习 · 14456 问题

查看课程