函数变量提升
小于 1 分钟
函数变量提升
function Foo() {
getName = function(){ console.log(1); };
return this;
}
Foo.getName = function() { console.log(2); };
Foo.prototype.getName = function(){ console.log(3); };
var getName = function() { console.log(4); };
function getName(){ console.log(5); }
Foo.getName(); // 2 调用了Foo的方法
getName(); // 4 变量提升,函数的提升更加优先,所以会被变量覆盖
Foo().getName(); // 1 Foo()执行,覆盖了getName方法
getName(); // 1 上一步对全局getName进行了覆盖
new Foo.getName(); //2 调用了Foo.getName创建了它的实例
new Foo().getName(); // 3 创建了Foo的实例,优先访问到原型链上的方法