Немає різниці в значенні та продуктивності в JavaScript або ActionScript.
var- це директива для аналізатора, а не команда, що виконується під час виконання. Якщо певний ідентифікатор був оголошений varраз або більше в будь-якому місці функціонального тіла (*), то все використання цього ідентифікатора в блоці буде посилатися на локальну змінну. Не має значення, чи valueоголошено йогоvar всередині циклу, поза циклом, або обидва.
Отже, ви повинні написати те, що вам найбільше читається. Я не погоджуюсь з Крокфордом, що ставити всі вищі вершини функції - це завжди найкраще. У випадку, коли змінна використовується тимчасово в розділі коду, краще оголосити varв цьому розділі, тому розділ стоїть окремо і його можна скопіювати. В іншому випадку скопіюйте декілька рядків коду в нову функцію під час рефакторингу, не вибираючи окремо та переміщуючи пов’язане var, і ви отримали випадковий глобальний результат.
Зокрема:
for (var i; i<100; i++)
do something;
for (var i; i<100; i++)
do something else;
Крокфорд порекомендує вам видалити друге var(або видалити обидва vars і зробити var i;вище), і jslint буде збиватися з вас для цього. Але в IMO важче зберегти обидва vars, зберігаючи весь пов'язаний код разом, замість того, щоб мати додатковий, легко забутий біт коду у верхній частині функції.
Особисто я схильний заявляти як varперше призначення змінної у незалежному розділі коду, чи є інше окреме використання того ж імені змінної в якійсь іншій частині тієї ж функції. Для мене varвзагалі декларувати - це небажана бородавка JS (краще було б мати змінні за замовчуванням для локальних); Я не вважаю своїм обов'язком дублювати обмеження [старої редакції] ANSI C також у JavaScript.
(*: крім вкладених функціональних органів)