例如:
function theClass() {
this.foo = 'bla';
}
var theO = new theClass();
function theClass() {
this.foo = 'lol';
}
//theO.foo = 'bla' or 'lol' when called?
theO.foo
是否会成为' bla'或者大声笑'在重新定义类后调用?
答案 0 :(得分:0)
它将是“lol”,因为第二个函数覆盖第一个函数。 Javascript首先解析函数。所以解析后的代码将是:
function theClass() {
this.foo = 'bla';
}
function theClass() {
this.foo = 'lol';
}
var theO = new theClass();
答案 1 :(得分:0)
JavaScript解释器将函数声明提升到JavaScript范围的顶部。
然后,
function theClass() {
this.foo = 'bla';
}
var theO = new theClass();
function theClass() {
this.foo = 'lol';
}
变为
function theClass() {
this.foo = 'bla';
}
function theClass() {
this.foo = 'lol';
}
var theO = new theClass();
因此,theClass
会在开头被覆盖,因此theO.foo
为'lol'
。
然而,它与函数表达式有所不同:
var theClass;
theClass = function theClass() {
this.foo = 'bla';
};
var theO = new theClass();
theClass = function theClass() {
this.foo = 'lol';
};
在这种情况下,theClass
在实例化后会被覆盖,因此theO.foo
为'bla'
。