Я надеюсь, что кто-то может объяснить мне, почему приведенный ниже JavaScript / HTML будет отображать «дверь № 2» при просмотре HTML в браузере:
<!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
вызовет появление "двери # 1". На самом деле, нагрузка вызывает «дверь № 2». Обратите внимание, что это будет сделано независимо от того, включено первое объявление testprint
или нет.
В третьем и четвертом объявлении testprint
используются разные способы назначения функции, я попробовал это, чтобы увидеть, переопределит ли оно поведение window.onload
в том же самом, что и второе объявление testprint
. Это не так. Обратите внимание, что если я переместлю четвертое объявление testprint
в конец первого блока скрипта, оно будет вызвано как window.onload
.