以下代码显示AAA,BBB,CCC,EEE,FFF。它会跳过DDD。 有人可以帮助为什么跳过DDD。谢谢。
<!DOCTYPE html>
<html>
<head>
<script>
func1('AAA');
function func1(x) { alert(x); }
func1('BBB');
</script>
</head>
<body>
<script>
func2('CCC');
</script>
<script>
function func2(x) { alert(x); }
</script>
<script>
func2('DDD');
</script>
<script>
func3('EEE');
function func3(x) { alert(x); }
func3('FFF');
</script>
</body>
</html>
&#13;
答案 0 :(得分:4)
它&#34;跳过&#34; CCC,而不是DDD。原因显示在浏览器控制台中:
Uncaught ReferenceError: func2 is not defined
功能声明仅提升到他们所在的脚本的顶部,浏览器不会加载所有脚本,执行吊装,然后一步一步地运行代码。
至于
<script>
func2('CCC');
</script>
...没有func2
,但失败了。 (稍后,当然会添加func2
,因此func2('DDD')
有效,我们会看到DDD。)
答案 1 :(得分:1)
你的意思是跳过CCC
而不是完全逻辑的DDD
,因为你试图在定义func2
之前调用一个函数,所以如果你检查您可以在控制台中看到描述此错误消息:
未捕获的ReferenceError:未定义func2
<!DOCTYPE html>
<html>
<head>
<script>
func1('AAA');
function func1(x) {alert(x);}
func1('BBB');
</script>
</head>
<body>
<script>
func2('CCC');
</script>
<script>
function func2(x) {alert(x);}
</script>
<script>
func2('DDD');
</script>
<script>
func3('EEE');
function func3(x) {alert(x);}
func3('FFF');
</script>
</body>
</html>
&#13;
相反,如果您将func2
的定义放在相同的script
中,并且调用将提升实际的函数定义,并且它会像func1
那样正常工作。
<!DOCTYPE html>
<html>
<head>
<script>
func1('AAA');
function func1(x) {alert(x);}
func1('BBB');
</script>
</head>
<body>
<script>
func2('CCC');
function func2(x) {alert(x);}
</script>
<script>
func2('DDD');
</script>
<script>
func3('EEE');
function func3(x) {alert(x);}
func3('FFF');
</script>
</body>
</html>
&#13;
希望这有帮助。
答案 2 :(得分:-2)
我不明白为什么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>
抱歉我的英语很差。