Achei a resposta do @ Piyush útil, e apenas para adicionar a ela, se você criar programaticamente um select, existe uma maneira importante de obter esse comportamento que pode não ser óbvio. Digamos que você tenha uma função e crie uma nova seleção:
var changeitem = function (sel) {
console.log(sel.selectedIndex);
}
var newSelect = document.createElement('select');
newSelect.id = 'newselect';
O comportamento normal pode ser dizer
newSelect.onchange = changeitem;
Mas isso realmente não permite que você especifique esse argumento transmitido; portanto, você pode fazer o seguinte:
newSelect.setAttribute('onchange', 'changeitem(this)');
E você é capaz de definir o parâmetro. Se você fizer isso da primeira maneira, o argumento que você acessará sua onchange
função dependerá do navegador. A segunda maneira parece funcionar bem entre navegadores.