В вашем примере на p1Index нет ссылки, пока он не был переназначен как p1Index = i; так что вы можете фактически удалить оператор присваивания без разницы в приведенном выше примере:
function useRanges() {
var range1 = document.createRange(),
range2 = document.createRange(),
p1 = document.getElementById("p1"),
p1Index, // The assignment isn't needed here
i, len;
for (i=0, len=p1.parentNode.childNodes.length; i < len; i++) {
if (p1.parentNode.childNodes[i] == p1) {
p1Index = i; // It just gets overwritten here
break;
}
}
// It might be used down here somewhere - your code example wasn't complete - p1Index is only conditionally overwritten when p1.parentNode.childNodes[i] == p1
}