img = document.getElementById("my_image");
img.onclick = "alert('hi')";
Это присвоение строки.
img.setAttribute ('onclick',"alert('hi')");
Это также присвоение строки.
img.onclick = function() {"alert('hi')";};
Это назначение функции, но вся функция содержит строку. Вы должны удалить цитаты из примерно alert('hi')
.
img.onclick = function(evt) {"alert('hi')";};
Опять же, функция, которая содержит только строку.
img.setAttribute ('onclick',function() {"alert('hi')";});
Опять ...
function handler(evt) {"alert('hi')";}
img.onclick = handler;
И снова.