function foo() { foo.a=function(){ console.log(1) } this.a=function(){ console.log(2) } a=function () { console.log(3) } var a = function(){ console.log(4) } } foo.a=function(){ console.log(6) } var obj = new foo(); foo.a() //为什么是1 不是直接调用吗?
2 回答
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
js的执行顺序function foo() {}
定义全局变量foofoo.a = function(){}
给全局变量foo的a属性赋值var obj = new foo();
构造函数调用foo
进入foo
函数:foo.a=function(){}
给全局变量foo的a属性覆盖操作this.a=function(){}
因为用了new关键字 this指向obj所以这句话是obj.a=...
下面两句要一起看a = function(){}
本来这句没有var是默认全局变量var a = function(){}
但是这一句用了var导致变量声明提前所以上面一句的a也变成了局部变量这一句覆盖了a
所以归根结底foo.a
只执行了两次操作
添加回答
举报
0/150
提交
取消