Когда ES6 теперь широко поддерживается, лучший ответ на этот вопрос изменился. ES6 предоставляет ключевые слова let
и const
для этого точного обстоятельства. Вместо того, чтобы возиться с закрытием, мы можем просто использовать let
для установки переменной области цикла таким образом:
var funcs = [];
for (let i = 0; i < 3; i++) {
funcs[i] = function() {
console.log("My value: " + i);
};
}
val
затем укажет на объект, специфичный для этого конкретного поворота цикл, и вернет правильное значение без дополнительной записи закрытия. Это явно значительно упрощает эту проблему.
const
аналогично let
с дополнительным ограничением на то, что имя переменной не может отскочить к новой ссылке после первоначального присваивания.
Поддержка браузера теперь предназначена для тех, кто ориентирован на последние версии браузеров. const
/ let
в настоящее время поддерживается в последних версиях Firefox, Safari, Edge и Chrome. Он также поддерживается в узле, и вы можете использовать его в любом месте, используя инструменты построения, такие как Babel. Вы можете увидеть рабочий пример здесь: http://jsfiddle.net/ben336/rbU4t/2/
Документы здесь:
Остерегайтесь, однако, что поддержка IE9-IE11 и Edge до Edge 14 let
, но получим неверное (они не создают новый i
каждый раз, поэтому все вышеперечисленные функции будут записывать 3, как если бы мы использовали var
). Edge 14, наконец, получает это право.
Использовать getAvailableIDs () класса TimeZone
import java.util.*;
class hello
{
public static void main (String[] args) throws java.lang.Exception
{
TimeZone tz=TimeZone.getDefault();
String a[]=tz.getAvailableIDs(21600000);
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
}