像这样的答案表明,当读取 JavaScript 文件时,函数声明在第一次传递期间被加载到内存中,而表达式在随后的传递中被评估。但是,下面的示例显示函数内部的函数是在执行代码后编译的。
为了使下面的代码工作,我必须将Child
构造函数移到测试函数之外,或者将它放在调用之前,new Child()
如果它要保留在test
函数内部。在其当前位置,您将TypeError: this.init is not a method
在运行代码时得到一个。
我在哪里可以找到有关何时评估函数中的函数声明的详细信息?
document.addEventListener('DOMContentLoaded', function() {
test()
}, false)
function test() {
// Child declaration can go here
var child = new Child()
// If Child is placed here, this.init is undefined
function Child() {
this.init()
}
Child.prototype = new Ancestor(Child)
}
function Ancestor(constructor) {
this.constructor = constructor
}
Ancestor.prototype.init = function init() {
console.log(this)
}
// Child declaration can go here