2014-07-09 6 views
1

Мы с коллегой обсуждали хорошие/плохие практики использования ключевого слова var в циклах. Это мой путь:JavaScript: использование ключевого слова var внутри и снаружи циклов

for (var i = 0; i < anArray.length; i++) { 
    for (var j = 0; j < anotherArray.length; j++) { 
     var a1 = someValue1; 
     var a2 = someValue2; 
     var a3 = someValue3; 
     var a4 = someValue4; 
     var a5 = someValue5; 

     ...... //Some other process that involve a1-5 
    } 
} 

Я вар внутри вложенных для петель. Предположим, что цикл i работает в 2000 раз и j для 3000 раз. Мой коллега утверждает, что с использованием var в циклах, подобных этим, является причиной утечки памяти, поэтому это плохая практика.Это правда?

Он говорит, что «var следует объявлять вне цикла, чтобы переменные были подвержены области действия и уничтожались при завершении области действия». Это правда?

Помимо вышеуказанных требований об утечке памяти, - это плохая практика, если да, то почему?

Я скептически отношусь к тому, что знаю (или, возможно, верю), используя var в цикле, a1-5 все равно уничтожается, когда эта функция заканчивается.

+0

Неважно, где вы кладете ключевое слово 'var'. Переменные в Javascript всегда имеют область действия. – Barmar

+2

Это уже ответила bee уже http://stackoverflow.com/questions/3684923/javascript-variables-declare-outside-or-inside-loop – Gpx

+1

@Gpx thx. Это не пришло, когда я искал. Может быть, это потому, что я использую ключевое слово var в поиске :( – Mysteltainn

ответ

0

Это чисто проблема стиля и не должно влиять на производительность или использование памяти. Переменные в Javascript имеют функциональную область независимо от того, где в объявленной функции. Когда функция компилируется, все объявления переменных поднимаются в начало функции.

2

Переменные получают водрузили, что означает, что интерпретатор JavaScript, ваш код выглядит следующим образом:

var i, j, a1, a2, a3, a4, a5; 
for (i = 0; i < anArray.length; i++) { 
    for (j = 0; j < anotherArray.length; j++) { 
     a1 = someValue1; 
     a2 = someValue2; 
     a3 = someValue3; 
     a4 = someValue4; 
     a5 = someValue5; 

     ...... //Some other process that involve a1-5 
    } 
} 

Так что не делает никакой разницы, где вы объявляете их - они имеют функцию сферы в любом случае.

Однако существует несколько действительный аргумент (хотя он может быть спорным), что вы должны объявить все свои переменные в верхней части своих функций, чтобы код выглядел одинаково с вами, как с интерпретатором, и вы не путаетесь, думая, что переменные, объявленные внутри блока, недействительны в другом месте. Думаю, это личное предпочтение.

Смежные вопросы