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 不是直接调用吗?
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
只执行了两次操作