Skrypt wstawiony w head wykonuje się od razu, czyli strona jeszcze nie widzi żadnych elementów, w tym #haslo, a już chce się nim zajmować.
Jednym sposobem aby to naprawić jest wstawienie script pod koniec body (I ten polecam w 99% przypadkach)
<!DOCTYPE HTML>
<html lang="pl">
<head>
<meta charset="utf-8" />
<title>Szubienica</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<div id="haslo"></div>
<script src="szubienica.js"></script>
</body>
</html>
Zawsze jest drugie wyjście, a mianowicie powiedzenie javascript, aby kod który ma się wykonać, żeby zrobił to dopiero po załadowaniu strony. Możesz to zrobić korzystając z event-ów w javascript. Przykładowy kod:
window.addEventListener('load', function(){
var haslo = "Bez pracy nie ma pieniedzy";
document.getElementById("haslo").innerHTML = haslo;
});