Генерация функции из строки. Как убежать? [Дубликат]

Еще один пример «Variable is out of scope»

Как я уже неоднократно видел подобные вопросы, может быть, еще один пример того, что является незаконным, даже если он может чувствовать в порядке.

Рассмотрим этот код:

if(somethingIsTrue()) {
  String message = "Everything is fine";
} else {
  String message = "We have an error";
}
System.out.println(message);

Это неверный код. Поскольку ни одна из переменных с именем message не видна за пределами их соответствующей области действия - в данном случае это будут окружающие скобки {}.

Вы могли бы сказать: «Но переменная с именем отображается в любом виде, поэтому сообщение указано , определенное после if».

Но вы ошибаетесь.

У Java нет операторов free() или delete, поэтому он должен полагаться на область отслеживания переменных, чтобы узнать, когда переменные больше не используются (вместе со ссылками на эти переменные причины).

Это особенно плохо, если вы считаете, что сделали что-то хорошее. Я видел такую ​​ошибку после «оптимизации» кода следующим образом:

if(somethingIsTrue()) {
  String message = "Everything is fine";
  System.out.println(message);
} else {
  String message = "We have an error";
  System.out.println(message);
}

«О, есть дублированный код, давайте вытащить эту общую строку» -> и вот оно.

. Наиболее распространенным способом борьбы с этим видом проблемы является предварительная привязка значений else к именам переменных во внешней области, а затем переназначение, если:

String message = "We have an error";
if(somethingIsTrue()) {
  message = "Everything is fine";
} 
System.out.println(message);
8
задан Tui Popenoe 21 February 2015 в 09:24
поделиться

1 ответ

Проблема заключается в том, что когда браузер встречает закрывающий тег </script> внутри открытого тега <script>, независимо от контекста, в котором он используется, он завершает там тег сценария. Есть несколько способов избежать этого.

Вариант 1 - Побег / в теге закрытия script:

var script = '<script async src="//somesite.com/feed/livetrend.js"><\/script>';

Вариант 2 - Оберните JavaScript в прокомментировал HTML-комментарии:

<script>
/*<!--*/
var script = '<script async src="//somesite.com/feed/livetrend.js"></script>';
/*-->*/
</script>

Вариант 3 - Поместите JavaScript во внешний файл:

Конечно, перемещение JavaScript во внешний файл вообще позволит избежать этой проблемы это может быть не предпочтительнее.

12
ответ дан Alexander O'Mara 21 August 2018 в 21:11
поделиться
  • 1
    Пробовал вариант 1 - он сработал. это то, что я искал. & lt; script & gt; в сценарии & gt; запутался. большое спасибо! – m Raj 21 February 2015 в 08:47
Другие вопросы по тегам:

Похожие вопросы: