我希望有人能向我解釋爲什麼當在瀏覽器中查看HTML時,下面的JavaScript/HTML將顯示「門#2」:在聲明之前引用JavaScript值 - 可以有人解釋這個
<!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>
由於只有在window.onload
設置爲testprint
之前發生的聲明testprint
,我期望window.onload
原因'門#1'出現。實際上,onload會導致'2號門'。請注意,無論是否包含testprint
的首次聲明,它都會執行此操作。
第三個和第四個聲明testprint
使用不同的方式來分配函數,我試過這個看看它是否會覆蓋window.onload
的行爲與第二個聲明testprint
一樣。它沒。請注意,如果我將testprint
的第四個聲明移到第一個腳本塊的末尾,它將被window.onload
調用。
在[瀏覽器不同意](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope#Conditionally_defining_a_function)中有一個微妙的函數提升。 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ** _ **將不會在**條件範圍內聲明提升函數, – 2013-11-04 10:38:56