猿问

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

function p(){

var a=2

this.run=function(){console.log(a)}

};

var b=new p()

b.run()

b.run()能正常输出a是2。可是a不是只属于p的一个变量吗,为何能访问到?


慕盖茨0887536
浏览 1182回答 2
2回答

qq_冲哥_0

当执行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 方法。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答