2017-01-21 6 views
0

Например:В цикле, лучше ли переопределить глобальную переменную или переопределить и переопределить локальную переменную снова или снова, или нет разницы?

является

for(var i = 1; i<100; i++){ 
    var inc = 1/i*PI; 
    //and so forth 
} 

в любом случае лучше или хуже, чем

var inc = 1/1*PI; 
for(var i = 1; i<100; i++){ 
    inc = 1/i*PI; 
} 

Конечно, первое легче ввести, но, возможно, это отнимает скорость/производительность (даже если немного) из программы при постоянном повторном объявлении той же переменной или переопределении значений для глобальной переменной. Спасибо.

+0

Там нет необходимости инициализировать * вкл * при объявлении во втором примере, так как его значение все равно устанавливается внутри цикла. – RobG

+0

@ RobG Право. Я просто помещаю его туда без причины, но это помогает, когда сначала видят переменную, объявленную, чтобы увидеть, какие конкретные значения она будет удерживать в программе ... – Roman

ответ

0

Второй подход правильный. Вы должны объявлять переменные только один раз.

Я бы закодировать ваш пример следующим образом:

var i,inc = 1/1*PI; 
for(i = 1; i<100; i++){ 
    inc = 1/i*PI; 
} 

Это помещает все объявления переменных в одном месте, что делает его легче читать код.

Если вы хотели бы использовать рамки на уровне блоков, используйте пусть заявление, например, так:

var i; 
for(i = 1; i<100; i++){ 
    let inc = 1/i*PI; 
} 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let

1

Из-за varhoisting, нет абсолютно никакой разницы между ними. И так как это не имеет никакого значения, в соответствии с Документами:

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

Теперь, если вы использовали let вместо var, история была бы иной. Я не думаю, что какая-либо разница в производительности вообще, но, несомненно, тогда будет семантическая разница. Документация для let подробно описывает эти различия.

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

  • Нет связанных вопросов^_^