快捷导航

关于javascript作用域的一个问题?

function p(){                        var a=2                        this.run=function(){console.log(a)}                };                var b=new p()b.run()b.run()能正常输出a是2。可是a不是只属于p的一个变量吗,为何能访问到?

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员1

当执行run 方法的时候,它执行的是console.log(a), 它会去寻找a, 首先是在当前作用域中,就是函数p 中,函数p 中你声明了一个变量a,且值为此, 它就是找的这个变量,console.log(a) 和var a =2, 是在同一个作用域中,它当然可以访问了。


var b = new p() 当执行new 操作的时候,它会生成一个新对象,并且 函数p 中的this 就指向这个对象,所以生成的对象有一个run 方法,但是没有a 这个属性,我们又把这个对象赋值给b , b 也就有了run 方法。
回复

使用道具 举报

可能感兴趣的问答

发新帖
TA的信息
  • 会员所属: 注册会员
  • 认证信息: 邮箱认证手机认证
  • 微信访问
  • 手机APP