gpt4 book ai didi

javascript - 在声明之前引用 JavaScript 值 - 有人可以解释一下吗

转载 作者:可可西里 更新时间:2023-11-01 01:36:28 24 4
gpt4 key购买 nike

我希望有人能向我解释为什么在浏览器中查看 HTML 时,以下 JavaScript/HTML 会显示“door #2”:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript">
function testprint() {
alert('door #1');
};

window.onload = testprint;

function testprint() {
alert('door #2');
};

testprint = function() {
alert('door #3');
};
</script>
<script type="text/javascript">
function testprint() {
alert('door #4');
};
</script>
</head>
<body>
</body>
</html>

因为只有声明 testprint 出现在 window.onload 设置为 testprint 之前,我希望 window.onload 导致“door #1”出现。实际上,onload 会导致“door #2”。请注意,无论是否包含 testprint 的第一个声明,它都会执行此操作。

testprint 的第三个和第四个声明使用不同的方法分配函数,我试过它是否会覆盖 window.onload 的行为是 testprint 的第二个声明。它没有。请注意,如果我将 testprint 的第四个声明移动到第一个脚本 block 的末尾,它将被 window.onload 调用。

最佳答案

函数声明是提升的主题,它们在解析时被评估,通过提升意味着它们可用于声明它们的整个范围,例如:

foo(); // alerts foo
foo = function () { alert('bar')};
function foo () { alert('foo');}
foo(); // alerts bar

第一次调用 foo 将执行函数声明,因为在解析时间它可用,第二次调用 foo 将执行在运行时声明的函数表达式

有关函数表达式和函数声明之间差异的更详细讨论,请查看 this questionthis article .

关于javascript - 在声明之前引用 JavaScript 值 - 有人可以解释一下吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1710424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com