用程式說明。
function hoist(i) {
console.log('input - ' + i);
for (var i=0; i<5; i++) {
console.log('loop - ' + i);
}
console.log('return - ' + i);
return i;
}
hoist(3);
傳入 i = 3,第一行輸出 input - 3,沒有問題。然後進入迴圈,重新命名 i,從 0 加到 4,因而輸出 loop - 1 ~ 4,這也可以理解。
問題在 return 應該是多少?
按照 Block-scoped 概念,應該是 return - 3,錯!