为了账号安全,请及时绑定邮箱和手机立即绑定

JS函数作用域

JS函数作用域

慕莱坞森 2018-08-13 10:09:52
以下代码有点不明白function a(){    var tag=true;     b(); }function b(){    console.log(tag) } a();执行a函数,那么就是先声明tag=true,然后执行b,按照把b中的console.log(tag)这句语句搬进a中替代b()的话,那么tag应该是可以打印出的,为什么tag为undefine?我知道可以通过传参解决,但是一直说不清楚其中机制,求大牛解答。
查看完整描述

1 回答

?
MM们

TA贡献1886条经验 获得超2个赞

ES6之前,Js中只有函数是具有块级作用域的,所以a中使用var声明的tag是在函数a作用域内的,而函数b执行时会在自己的作用域中找tag,找不到就会去外层找,直到全局对象上还没有就是undefined,这里a和b不是包含关系,因此b自身没有tag时不会去a中找,而是去全局找,结果也没有,所以是undefined,如果你的b函数声明是在a内部的,你再调用就会打印出true了。


查看完整回答
反对 回复 2018-09-20
  • 1 回答
  • 0 关注
  • 486 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信