Javascript 未捕获引用错误:未定义boo
如何确保在调用boo之前定义了它? 我不想被迫重新安排JavaScript,以便在调用Javascript 未捕获引用错误:未定义boo,javascript,Javascript,如何确保在调用boo之前定义了它? 我不想被迫重新安排JavaScript,以便在调用boo()之前定义boo=function boo() boo=函数(){ console.log('Yay!') }您需要从函数表达式更改为函数声明。 提升规则在函数声明时起作用,但在函数表达式时不提升函数定义 简单地说,Javascript运行时分两次运行,在第一次运行时,它将查找所有声明并创建所有声明的映射。不执行任何代码在下一个过程中,对代码进行求值,如果发现任何未知声明,它将抛出引用错误,因为它无法
boo()
之前定义boo=function
boo()
boo=函数(){
console.log('Yay!')
}
您需要从函数表达式更改为函数声明。
提升规则在函数声明时起作用,但在函数表达式时不提升函数定义
简单地说,Javascript运行时分两次运行,在第一次运行时,它将查找所有声明并创建所有声明的映射。不执行任何代码在下一个过程中,对代码进行求值,如果发现任何未知声明,它将抛出引用错误,因为它无法解析该引用
在你的情况下,在第一关没有任何声明。因此,对函数的引用不会存储为函数表达式,其中变量被指定为对函数的引用,该函数将在下一个过程中进行计算
在第二个过程中,当代码求值开始时,boo变量已经声明为全局变量,并且具有未定义的值。语句boo()
对未定义的变量调用函数。所以,你得到了错误。希望它能消除任何困惑
boo();
函数boo(){
console.log('Yay!')
}
您必须将其声明为函数,而不是变量
boo();
函数boo(){
console.log('Yay!')
}
请阅读我告诉我的学生,我有这么高的代表性,因为我问了很多愚蠢的问题。这是一个函数表达式,所以只有当那一行是reached@aw04:当您将鼠标悬停在向下箭头上方时,给出的向下投票的第一个标准是“此问题不显示任何研究成果”。是的,这是非常相关的。我忘了提到它是foo.bar=function(),而不仅仅是boo=function。因此,函数名提升不是一个选项(我不认为)。foo
在第一个过程中找不到,因为正如您所指出的,没有声明语法。如果在第一次过程中发现并创建了一个全局错误,那么错误将是TypeError而不是ReferenceError不幸的是,OP最初决定询问一些与实际问题无关的问题,这样一来,你所做的工作就过时了,我想我们现在必须假设这个问题是相关的。@squint,从现在开始我会更加小心。