Немає різниці в значенні та продуктивності в 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
(або видалити обидва var
s і зробити var i;
вище), і jslint буде збиватися з вас для цього. Але в IMO важче зберегти обидва var
s, зберігаючи весь пов'язаний код разом, замість того, щоб мати додатковий, легко забутий біт коду у верхній частині функції.
Особисто я схильний заявляти як var
перше призначення змінної у незалежному розділі коду, чи є інше окреме використання того ж імені змінної в якійсь іншій частині тієї ж функції. Для мене var
взагалі декларувати - це небажана бородавка JS (краще було б мати змінні за замовчуванням для локальних); Я не вважаю своїм обов'язком дублювати обмеження [старої редакції] ANSI C також у JavaScript.
(*: крім вкладених функціональних органів)