先上代码functiona(){vartemp=10;functionb(){console.log(temp);//10}b();}a();functiona(){vartemp=10;b();}functionb(){console.log(temp);//报错}a();模模糊糊有个作用域的概念,但是无法清楚明白的说出来,请大佬指点~*打印出a函数的原因是将变量和函数取为同名了,现在已修改
2 回答
杨__羊羊
TA贡献1943条经验 获得超7个赞
第一段代码相信没啥问题,函数b执行是能取到其父函数a作用域下的变量a。第二段由于函数a和函数b是同级函数,变量a是在函数a的作用域下,且没有全局作用域下的变量a的声明,所以报错。
回首忆惘然
TA贡献1847条经验 获得超11个赞
第二种,怎么会是报错呢?不太明白题主的报错是什么意思,a是一个函数,输出函数不会报错调用函数时函数内调用的变量会在本函数内或定义函数的作用域向外找在定义函数的作用域找而非调用的作用域:functiona(){console.log(b);}letb=10{letb=1;a();//10}当调用b的时候,b会在本函数内找a,没有向外找,去定义b的作用域(全局)找a,这时a是全局函数找到了,然后输出a
添加回答
举报
0/150
提交
取消