Skip to content

Instantly share code, notes, and snippets.

@YozhEzhi
Last active July 21, 2020 20:27
Show Gist options
  • Save YozhEzhi/55acc87016626a5664e446cf4400b025 to your computer and use it in GitHub Desktop.
Save YozhEzhi/55acc87016626a5664e446cf4400b025 to your computer and use it in GitHub Desktop.
[Заметки] JS

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

Обращение к такой переменной создаёт новую переменную в глобальном объекте. В случае с браузерами, глобальным объектом является window. Рассмотрим такую конструкцию:

function foo(arg) {
    bar = "some text";
}

Она эквивалентна следующему коду:

function foo(arg) {
    window.bar = "some text";
}

Если переменную bar планируется использовать только внутри области видимости функции foo, и при её объявлении забыли о ключевом слове var, будет случайно создана глобальная переменная.

В этом примере утечка памяти, выделенной под простую строку, большого вреда не принесёт, но всё может быть гораздо хуже.

use strict - это не позволит.


Обработка ошибок при использовании промисов:

function loadData() {
    try { // Перехват синхронных ошибок.
        getJSON().then(function(response) {
            var parsed = JSON.parse(response);
            console.log(parsed);
        }).catch(function(e) { // Перехват асинхронных ошибок
            console.log(e); 
        });
    } catch(e) {
        console.log(e);
    }
}

Вот как обрабатывать ошибки при использовании async / await:

async function loadData() {
    try {
        var data = JSON.parse(await getJSON());
        console.log(data);
    } catch(e) {
        console.log(e);
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment