Лучше функцию вынести отдельно, чтобы не создавать каждый раз новую.
var onClick = function(i) {
alert(i);
};
for(var i = 0, h; i < 3; i++)
{
h = document.createElement("button");
h.innerHTML = "alert = " + i;
h.onclick = onClick.bind(h, i);
document.body.appendChild(h);
}