基于执行顺序的HTML内部JavaScript
以下代码显示AAA、BBB、CCC、EEE、FFF。它跳过DDD。 有人能帮我解释为什么跳过DDD吗。多谢各位基于执行顺序的HTML内部JavaScript,javascript,html,Javascript,Html,以下代码显示AAA、BBB、CCC、EEE、FFF。它跳过DDD。 有人能帮我解释为什么跳过DDD吗。多谢各位 功能1(“AAA”); 函数func1(x){alert(x);} 功能1(“BBB”); 功能2(“CCC”); 函数func2(x){alert(x);} func2(“DDD”); 功能3(“EEE”); 函数func3(x){alert(x);} func3(“FFF”); 它“跳过”CCC,而不是DDD。原因显示在浏览器控制台中: Uncaught ReferenceEr
功能1(“AAA”);
函数func1(x){alert(x);}
功能1(“BBB”);
功能2(“CCC”);
函数func2(x){alert(x);}
func2(“DDD”);
功能3(“EEE”);
函数func3(x){alert(x);}
func3(“FFF”);
它“跳过”CCC,而不是DDD。原因显示在浏览器控制台中:
Uncaught ReferenceError: func2 is not defined
未捕获引用错误:未定义func2
函数声明只提升到它们所在脚本的顶部,浏览器不会加载所有脚本,进行提升,然后运行分步代码
所以从
<script>
func2('CCC');
</script>
功能2(“CCC”);
…没有
func2
,因此失败。(当然,稍后添加了func2
,因此func2('DDD')
起作用,我们看到了DDD。)您的意思是跳过CCC
而不是DDD
,因为您试图在函数定义func2
之前调用它,所以它完全符合逻辑,因此,如果您检查控制台,您可以看到描述以下内容的错误消息:
未捕获引用错误:未定义func2
功能1(“AAA”);
函数func1(x){alert(x);}
功能1(“BBB”);
功能2(“CCC”);
函数func2(x){alert(x);}
func2(“DDD”);
功能3(“EEE”);
函数func3(x){alert(x);}
func3(“FFF”);
我不明白,如果该方法未在使用过程中声明,为什么CCC会运行。正确的声明是这样的
<!DOCTYPE html>
<html>
<head>
<script>
function func1(x) {alert(x);}
func1('AAA');
func1('BBB');
</script>
</head>
<body>
<script>
function func2(x) {alert(x);}
</script>
<script>
func2('CCC');
</script>
<script>
func2('DDD');
</script>
<script>
function func3(x) {alert(x);}
func3('EEE');
func3('FFF');
</script>
</body>
函数func1(x){alert(x);}
功能1(“AAA”);
功能1(“BBB”);
函数func2(x){alert(x);}
功能2(“CCC”);
func2(“DDD”);
函数func3(x){alert(x);}
功能3(“EEE”);
func3(“FFF”);
对不起,我的英语很差。实际上是
CCC
没有显示,因为func2
还没有定义,不知道你在endGrammar问题上看到了什么,没有提到函数,这个答案最多是不完整的。“正确”并不能成为一个好答案。帮助询问者完全理解问题,在这种情况下,如果不提及函数提升(“您试图在函数[sic]定义之前调用函数”,当在OP的代码func1
定义之前也被调用时,这是没有多大帮助的,但效果很好)-很好的回答。谢谢你的干预@Jordan。。更新了我的答案。这就引出了我在标题部分的问题,为什么要调用AAA
?因为func1
还没有定义?没错,我错了,跳过了CCC。那么,是不是因为每个func2调用都在一个单独的脚本标记中?@Roljhon它是在同一个脚本块中定义的。当它被调用时,它已经被加载了。如果将示例更改为与func2
相同的情况,则会看到相同的提升问题:func1('AAA');函数func1(x){console.log(x);}func1('BBB')代码>@Roljhon:废可乐说了什么。在回答中,是“函数声明只被提升到它们所在脚本的顶部。”func1
与func1('AAA')
is在同一脚本中。@T.J.Crowder是的,我不熟悉这个词,抱歉:)谢谢!