Глобальная переменная перезаписывает область действия функции, если она повторно объявлена, даже перед повторным объявлением в JavaScript

Один из способов сохранить информацию в новой строке с JSoup - это предшествовать всем новым тегам строки с помощью некоторой фиктивной строки, выполнить JSoup и заменить фиктивную строку на «\n».

String html = "<p>Line one</p><p>Line two</p>Line three<br/>etc.";
String NEW_LINE_MARK = "NEWLINESTART1234567890NEWLINEEND";
for (String tag: new String[]{"</p>","<br/>","</h1>","</h2>","</h3>","</h4>","</h5>","</h6>","</li>"}) {
    html = html.replace(tag, NEW_LINE_MARK+tag);
}

String text = Jsoup.parse(html).text();

text = text.replace(NEW_LINE_MARK + " ", "\n\n");
text = text.replace(NEW_LINE_MARK, "\n\n");
0
задан Mighty Helper 31 March 2019 в 00:18
поделиться

2 ответа

Это не перезаписывает глобальное значение - действительно, вы не можете, потому что const VAR1 создает константу - это никогда не может быть переназначено напрямую с помощью =. Ваш код испытывает подъем переменной - вот объяснение:

Ваш код содержит две переменные с одинаковыми именами - одну вне функции (глобальная область) и одну внутри функции (локальная область) ).

Вы пытаетесь прочитать переменную внутри функции, прежде чем назначить ее. Это делает ваш код эквивалентным этому:

const VAR1 = 3;
document.onclick = () => {
    var VAR1;
    console.log(VAR1);
    VAR1 = 2;
    console.log(VAR1);
}

Если вы запустите свой код без переменной локальной области видимости, тогда он работает, глядя на глобальную область видимости (поскольку переменные работают из текущий объем за пределы):

const VAR1 = 3;
document.onclick = () => {
    //There's no VAR1 here, so it goes out a level and looks for VAR1 there and so on until it finds it.
    console.log(VAR1);
    console.log(VAR1);
}
0
ответ дан Jack Bashford 31 March 2019 в 00:18
поделиться

Это связано с эффектом перемещения вашей переменной VAR внутри обработчика событий. Таким образом, это

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Document</title>
</head>
<body>
    <script>
     const VAR = 3;
     document.onclick = function(event) {
         console.log(VAR); // undefined, VAR in so-called Temporary Dead Zone
         var VAR = 2;
         console.log(VAR); // 2
     };
    </script>
</body>
</html>

эквивалентно этому

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Document</title>
</head>
<body>
    <script>
     const VAR = 3;
     document.onclick = function(event) {
         var VAR; // VAR declared but NOT defined, so VAR again in TDZ
         console.log(VAR); // undefined
         VAR = 2; // VAR defined
         console.log(VAR); // 2
     };
    </script>
</body>
</html>

Возможно, вы захотите прочитать больше о подъемах, объявлениях var Old-School и TDZ. - С уважением, М.

0
ответ дан Micha 31 March 2019 в 00:18
поделиться
Другие вопросы по тегам:

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