不是说函数内部可以访问到外部的变量吗?那为什么第一次弹出的不是111???

来源:2-6 选择题

zywzyw

2018-04-15 08:12:34

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

写回答

2回答

Miss路

2018-04-16

第二个里面没有重新var定义呀,所以能取到外面的。如果是下图中那样,在最里面的方法中也重新用var定义了变量,那两个都是undefined了:

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

建议同学要多动手试试哦。

祝学习愉快!

1
hywzyw
h 好的。多谢老师!!
h018-04-16
共1条回复

Miss路

2018-04-15

在函数内部使用var声明的变量是局部变量,函数内弹框输出a,访问的就是局部变量a的值,弹框是在变量赋值的前面执行的,所以获取变量值为未定义。

祝学习愉快!

0
hq_修炼者_0
回复
hywzyw
h 首先 预解析的时候test函数里面和外面都有a都有var声明,会解析成undefined,subTest函数里面没有var声明,不会预解析。然后逐行读代码,外面的a赋值为111,执行到函数里面的时候因为此时的a还没有被赋值所以是预解析时候的值--》即第一个a值为undefined。程序读到subTest里面的时候,因为这里面的a没有预解析,所以在它的函数作用域里找不到,就向外面查找,刚好在test里面遇到了a,因为此时的test里的a不仅解析了还赋了值,所以subTest里面可访问到值--》11
h018-04-16
共3条回复

0 学习 · 4826 问题

查看课程