{"action":"created","comment":{"url":"https://api.github.com/repos/denysdovhan/understandinges6ua/pulls/comments/61951445","id":61951445,"diff_hunk":"@@ -0,0 +1,1204 @@\n+# Функції\n+\n+Функцій — важлива частина будь–якої мови програмування, і до ECMAScript 6, функції в JavaScript на зазнавали значних змін з моменту створення мови. Це накопичувало проблеми та нюанси поведінки, які призводили до помилкок та потребували більше коду для виконання базових завдань.\n+\n+Функції в ECMAScript 6 зробили великий крок уперед, беручи до уваги скарги та прохання JavaScript–розробників. Результатом стали численні покращення ECMAScript 5 функцій, що допоможуть уникнути помилок при програмуванні на JavaScript та зроблять його більш потужним.\n+\n+## Функції з параметрами за замовчуванням\n+\n+Функції в JavaScript є унікальними з тієї точки зору, що дозволяють приймати будь-яку кількість параметрів, незалежновід того, яку кількість параметрів було оголошено при визначенні функції. Це дозволяє вам визначати функції, що можуть оперувати різною кількістю параметрів просто підставляючи значення за замовчуванням, коли вони не передані. Цей розділ розповідає про те, як параметри за замовчуванням працюють до та в ECMAScript 6, разом з важливою інформацією про об’єкт `arguments`, використання виразів у якості параметрів та інші нюанси.\n+\n+### Імітування параметрів за замовчуванням у ECMAScript 5\n+\n+У ECMAScript 5 та раніше ви, напевно, використовували такий шаблон для створення функції з параметрами за замовчуванням:\n+\n+```js\n+function makeRequest(url, timeout, callback) {\n+\n+    timeout = timeout || 2000;\n+    callback = callback || function() {};\n+\n+    // решта функції\n+\n+}\n+```\n+\n+У цьому прикладі і `timeout`, і `callback` є насправді необов’язковими, тому що їм передаються значення за замовчуваннями, якщо вони не вказані. Логічний оператор AБО (`||`) завжди повертає другий оперант, якщо перший є хибним. Оскільки вказані параметри не вказані, їм буде встановелене значення `undefined`, таким чином оператор логічного АБО часто використовується для встановлення пропущеним параметрам значень за замовчуванням. Однак, у такому підході є недолік: у тому випадку, якщо `timeout` матиме значення `0`, яке є валідним, воно буде замінене на `2000`, тому що `0` є хибою.\n+\n+У цьому випадку, безпечнішою альтернативою первірки чи було передано аргумент є використання `typeof`, як у цьому прикладі:\n+\n+```js\n+function makeRequest(url, timeout, callback) {\n+\n+    timeout = (typeof timeout !== \"undefined\") ? timeout : 2000;\n+    callback = (typeof callback !== \"undefined\") ? callback : function() {};\n+\n+    // решта функції\n+\n+}\n+```\n+\n+Цей підхід безпечніший, але він потребує багато зайвого коду для такої простої операції. Популярні JavaScript–бібліотеки часто використовують подібний патерн, оскільки цей підхід є загальним.\n+\n+### Параметри за замовчуванням у ECMAScript 6\n+\n+ECMAScript 6 полегшує передачу значень параметрам за замовчуванням шляхом ініціалізації, яка відбувається, коли параметер не був переданий. Наприклад:\n+\n+```js\n+function makeRequest(url, timeout = 2000, callback = function() {}) {\n+\n+    // the rest of the function\n+\n+}\n+```\n+\n+Ця функція очікує, що лише перший параметер буде передаватись завжди. Інші два параметри мають значення за замовчуванням, що робить тіло функції меншим, оскільки вам не потрібно писати додатковий код для перевірки значень.\n+\n+Коли `makeRequest()` з усіма трьома параметрами, параметри за замовчуванням не будуть використовуватись. Наприклад:\n+\n+```js\n+// використовує значення timeout та callback за замовчуванням\n+makeRequest(\"/foo\");\n+\n+// використовує callback за замовчуванням\n+makeRequest(\"/foo\", 500);\n+\n+// не використовує значення за замовчуванням\n+makeRequest(\"/foo\", 500, function(body) {\n+    doSomething(body);\n+});\n+```\n+\n+ECMAScript 6 розглядає `url` як обов’язковий параметер, тому ми передаємо `\"/foo\"` у всіх трьох викликах `makeRequest()`. Два параметри зі значеннями за замовчуванням розглядаються як необов’язкові.\n+\n+Можливо задавати значення за замовчуванням для будь–яких аргументів, включаючи ті, які стоять у оголошенні функції перед аргументами без значень за замовчуванням. Наприклад, такий код працює як і очікується:\n+\n+```js\n+function makeRequest(url, timeout = 2000, callback) {\n+\n+    // решта функції\n+\n+}\n+```\n+\n+У цьому випадку значення `timeout` за замовчування використовуватиметься лише тоді, коли другий аргумент не переданий, або якщо в якості другого аргументу безпосередньо передати `undefined`, як у цьому прикладі:\n+\n+```js\n+// використовує timeout за замовчуванням\n+makeRequest(\"/foo\", undefined, function(body) {\n+    doSomething(body);\n+});\n+\n+// використовує значення timeout за замовчуванням\n+makeRequest(\"/foo\");\n+\n+// не використовує значення timeout за замовчуванням\n+makeRequest(\"/foo\", null, function(body) {\n+    doSomething(body);\n+});\n+```\n+\n+У цьому випадку, значення `null` приймається як валідне і означає, що в третьому виклику `makeRequest()` значення `timeout` за замовчуванням не буде використовуватись.\n+\n+### Як параметри за замовчуванням впливають на об’єкт arguments\n+\n+Просто запам’ятайте, що поведніка об’єкту `arguments` відрізняється від звичної, якщо використовуються значення за замовчуванням. У нестрогому режимі (nonstrict mode) ECMAScript 5, об’єкт `arguments` відображає зміни у іменованих параметрах функції. Нижче наведений код, який ілюструє як це працює:\n+\n+```js\n+function mixArgs(first, second) {\n+    console.log(first === arguments[0]);\n+    console.log(second === arguments[1]);\n+    first = \"c\";\n+    second = \"d\";\n+    console.log(first === arguments[0]);\n+    console.log(second === arguments[1]);\n+}\n+\n+mixArgs(\"a\", \"b\");\n+```\n+\n+Вивід:\n+\n+```\n+true\n+true\n+true\n+true\n+```\n+\n+У нестрогому режимі об’єкт `arguments` завжди оновлюється, щоб відображати зміни в іменованих параметрах. Тобто, якщо `first` та `second` присвоїти нові значення, `arguments[0]` там `arguments[1]` оновляться миттєво, так що порівняння `===` даватиме результат `true`.\n+\n+Однак строгий режим (strict mode) ECMAScript 5 усуває цей неочевидну властивість об’єкту `arguments`. У строгому режимі, об’єкт `arguments` не відображає зміни в іменованих параметрах. Нижче знову наведена функція `mixArgs()`, але у строгому режимі:\n+\n+```js\n+function mixArgs(first, second) {\n+    \"use strict\";\n+\n+    console.log(first === arguments[0]);\n+    console.log(second === arguments[1]);\n+    first = \"c\";\n+    second = \"d\"\n+    console.log(first === arguments[0]);\n+    console.log(second === arguments[1]);\n+}\n+\n+mixArgs(\"a\", \"b\");\n+```\n+\n+Виклик `mixArgs()` виведе:\n+\n+```\n+true\n+true\n+false\n+false\n+```\n+\n+Цього разу зміни `first` та `second` не повпливали на `arguments`, тому вивід буде саме таким, яким ви його очікуєте.\n+\n+Об’єкт `arguments` у функціях, що використовують ECMAScript 6 параметри за замовчуванням, однак, завжди поводитимуться так, як вони поводяться у строгому режимі ECMAScript 5, незалежно від того чи функція працює у строгому режимі чи ні. Наявність параметрів за замовчуванням робить об’єкт `arguments` незалежним від іменованих параметрів. Це тонка, але важлива деталь того як об’єкт `arguments` може бути використаний. Розгляньте наступне:\n+\n+```js\n+// не строгий режим\n+function mixArgs(first, second = \"b\") {\n+    console.log(arguments.length);\n+    console.log(first === arguments[0]);\n+    console.log(second === arguments[1]);\n+    first = \"c\";\n+    second = \"d\"\n+    console.log(first === arguments[0]);\n+    console.log(second === arguments[1]);\n+}\n+\n+mixArgs(\"a\");\n+```\n+\n+Виведе:\n+\n+```\n+1\n+true\n+false\n+false\n+false\n+```\n+\n+У цьому прикладі, `arguments.length` рівне 1 тому що лише один аргумент було передано до `mixArgs()`. Це також означає, що `arguments[1]` рівний `undefined`, що є очікованою поведінкою, коли лише один аргумент передається у функцію. Це також означає, що `first` є рівним `arguments[0]`. Зміна `first` та `second` не повпливає на `arguments`. Така поведінка буде у як у строгому так і нестрогому режимах, тож ви можете бути певні, що `arguments` завжди відображатиме початковий стан виклику.\n+\n+### Вирази в параметрах за замовчуванням\n+\n+Одним з найбільш цікавих нововведень параметрів за замовчуванням є те, що їх значення не обов’язково мають бути примітивними значеннями. Ви можете, до прикладу, викликати функцію, що повертатиме значення параметру, ось так:\n+\n+```js\n+function getValue() {\n+    return 5;\n+}\n+\n+function add(first, second = getValue()) {\n+    return first + second;\n+}\n+\n+console.log(add(1, 1));     // 2\n+console.log(add(1));        // 6\n+```\n+\n+Тут, якщо останній аргумент не переданий, викликається фукнція `getValue()`, що повертає коректне значення за замовчуванням. Пам’ятайте, що `getValue()` буде викликана лише тоді, коли `add()` буде викликана без другого аргументу, а не тоді, коли оголошення функції буде оброблене інтерпретатором. Це означає, що якщо `getValue()` була написана змінною, вона буде повертати різні значення. Для розуміння:\n+\n+```js\n+let value = 5;\n+\n+function getValue() {\n+    return value++;\n+}\n+\n+function add(first, second = getValue()) {\n+    return first + second;\n+}\n+\n+console.log(add(1, 1));     // 2\n+console.log(add(1));        // 6\n+console.log(add(1));        // 7\n+```\n+\n+У цьому прикладі, `value` має значення п’ять і збільшується на одиницю щоразу, коли викликається `getValue()`. Перший виклик `add(1)` повертає 6, тоді другий виклик `add(1)` повертає 7, тому що `value` був збільшений на одиницю. Оскільки значення `second` за замовчуванням обчислюється при виклику функції, можна змінюти це значення у будь–який час.\n+\n+W> Будьте обережними при використанні виклику фукнцій в якості параметрів за замовчуванням. Якщо ви забудете дужки, як ось `second = getValue` у останньому прикладі, ви отримаєте посилання на функцію замість результату її виклику.\n+\n+Така поведінка демонструє іншу цікаву особливість. Ви можете використовувати параметер за замовчування для наступного параметра. Ось приклад:\n+\n+```js\n+function add(first, second = first) {\n+    return first + second;\n+}\n+\n+console.log(add(1, 1));     // 2\n+console.log(add(1));        // 2\n+```\n+\n+У цьому прикладі, параметр `second` отримує значення `first` за замовчуванням, що означає, що виклик фукнції з одним аргументом присвоїть обом параметрам однакове значення. Тому `add(1, 1)` поверне 2, так само як `add(1)` повертає 2. Навіть більше, ви можете передати `first` у функцію, щоб отримаи значення `second` ось так:\n+\n+```js\n+function getValue(value) {\n+    return value + 5;\n+}\n+\n+function add(first, second = getValue(first)) {\n+    return first + second;\n+}\n+\n+console.log(add(1, 1));     // 2\n+console.log(add(1));        // 7\n+```\n+\n+Цей приклад встановлює `second` рівним значенню, яке було повернуте `getValue(first)`, тому `add(1, 1)` продовжує повертати 2, а `add(1)` поверне 7 (1 + 6).\n+\n+Можливість посилатись на параметри працює лише при зверненні до попередніх аргументів, тому аргументи попереду не мають доступу до наступних аргументів. Наприклад:\n+\n+```js\n+function add(first = second, second) {\n+    return first + second;\n+}\n+\n+console.log(add(1, 1));     // 2\n+console.log(add(1));        // викине помилку\n+```\n+\n+Виклик `add(1)` викине помилку, тому що `second` визначений після `first` і тому недоступний в якості значення за замовчуванням. Щоб зрозуміти що тут відбувається, важливо згадати що таке тимчасом мертва зона.\n+\n+### Тимчасова мертва зона параметрів за замовчуванням\n+\n+Глава 1 ввела поняття тимчасової мертвої зони (ТМЗ) яка стосувалась `let` та `const`, втім параметри за замовчуванням також мають ТМЗ, з якої параметри будуть недоступними. Подібно до `let`–оголошення, кожен параметр створює новий ідентифікатор зв’язування, на який не можна посилатись до його ініціалізації не спричинивши помилки. Ініціалізація параметрів відбувається тоді, коли функція викликається, \n+Parameter initialization happens when the function is called, або при передачі параметрам значення, або при використанні значень параметрів за замовчуванням.\n+\n+Щоб дослідити ТМЗ параметрів за замовчуванням, розглянемо цей приклад з розділу «Вирази в параметрах за замовчуванням»:\n+\n+```js\n+function getValue(value) {\n+    return value + 5;\n+}\n+\n+function add(first, second = getValue(first)) {\n+    return first + second;\n+}\n+\n+console.log(add(1, 1));     // 2\n+console.log(add(1));        // 7\n+```\n+\n+Виклики `add(1, 1)` та `add(1)` ефективно виконують присвоєння `first` та `second` значень за замовчуванням:\n+\n+```js\n+// JavaScript представлення виклику add(1, 1)\n+let first = 1;\n+let second = 1;\n+\n+// JavaScript представлення виклику add(1)\n+let first = 1;\n+let second = getValue(first);\n+```\n+\n+Коли функція `add()` виконується вперше, зв’язування `first` та `second` додаються до специфічної для параметрів ТМЗ (схоже на те, як поводить себе `let`). Тому `second` може бути ініціалізований зі значенням `first`, оскільки `first` у той момент буде вже ініціалізованим, але протилежне не є вірним. Тепер розглянемо змінену функцію `add()`:\n+\n+```js\n+function add(first = second, second) {\n+    return first + second;\n+}\n+\n+console.log(add(1, 1));         // 2\n+console.log(add(undefined, 1)); // кидає помилку\n+```\n+\n+Давайте розглянемо, що відбувається за лаштунками при виклику `add(1, 1)` та `add(undefined, 1)` у цьому прикладі:","path":"manuscript/03-Functions.md","position":311,"original_position":311,"commit_id":"fb5dbabb9f238690205f6b825ec7a93bdd47ad27","original_commit_id":"fb5dbabb9f238690205f6b825ec7a93bdd47ad27","user":{"login":"Mariannach","id":16766438,"avatar_url":"https://avatars.githubusercontent.com/u/16766438?v=3","gravatar_id":"","url":"https://api.github.com/users/Mariannach","html_url":"https://github.com/Mariannach","followers_url":"https://api.github.com/users/Mariannach/followers","following_url":"https://api.github.com/users/Mariannach/following{/other_user}","gists_url":"https://api.github.com/users/Mariannach/gists{/gist_id}","starred_url":"https://api.github.com/users/Mariannach/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mariannach/subscriptions","organizations_url":"https://api.github.com/users/Mariannach/orgs","repos_url":"https://api.github.com/users/Mariannach/repos","events_url":"https://api.github.com/users/Mariannach/events{/privacy}","received_events_url":"https://api.github.com/users/Mariannach/received_events","type":"User","site_admin":false},"body":"під час виклику","created_at":"2016-05-03T20:37:06Z","updated_at":"2016-05-03T20:37:06Z","html_url":"https://github.com/denysdovhan/understandinges6ua/pull/4#discussion_r61951445","pull_request_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/pulls/4","_links":{"self":{"href":"https://api.github.com/repos/denysdovhan/understandinges6ua/pulls/comments/61951445"},"html":{"href":"https://github.com/denysdovhan/understandinges6ua/pull/4#discussion_r61951445"},"pull_request":{"href":"https://api.github.com/repos/denysdovhan/understandinges6ua/pulls/4"}}},"pull_request":{"url":"https://api.github.com/repos/denysdovhan/understandinges6ua/pulls/4","id":63468081,"html_url":"https://github.com/denysdovhan/understandinges6ua/pull/4","diff_url":"https://github.com/denysdovhan/understandinges6ua/pull/4.diff","patch_url":"https://github.com/denysdovhan/understandinges6ua/pull/4.patch","issue_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/issues/4","number":4,"state":"open","locked":false,"title":"Translate “03 Funcitons”","user":{"login":"denysdovhan","id":3459374,"avatar_url":"https://avatars.githubusercontent.com/u/3459374?v=3","gravatar_id":"","url":"https://api.github.com/users/denysdovhan","html_url":"https://github.com/denysdovhan","followers_url":"https://api.github.com/users/denysdovhan/followers","following_url":"https://api.github.com/users/denysdovhan/following{/other_user}","gists_url":"https://api.github.com/users/denysdovhan/gists{/gist_id}","starred_url":"https://api.github.com/users/denysdovhan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/denysdovhan/subscriptions","organizations_url":"https://api.github.com/users/denysdovhan/orgs","repos_url":"https://api.github.com/users/denysdovhan/repos","events_url":"https://api.github.com/users/denysdovhan/events{/privacy}","received_events_url":"https://api.github.com/users/denysdovhan/received_events","type":"User","site_admin":false},"body":"Translate [`03-Functions.md`](https://github.com/nzakas/understandinges6/blob/master/manuscript/03-Functions.md).","created_at":"2016-03-19T13:37:24Z","updated_at":"2016-05-03T20:37:06Z","closed_at":null,"merged_at":null,"merge_commit_sha":"18d94a5f2c4bd4a49b8dd4f5ecb07796628ad573","assignee":{"login":"denysdovhan","id":3459374,"avatar_url":"https://avatars.githubusercontent.com/u/3459374?v=3","gravatar_id":"","url":"https://api.github.com/users/denysdovhan","html_url":"https://github.com/denysdovhan","followers_url":"https://api.github.com/users/denysdovhan/followers","following_url":"https://api.github.com/users/denysdovhan/following{/other_user}","gists_url":"https://api.github.com/users/denysdovhan/gists{/gist_id}","starred_url":"https://api.github.com/users/denysdovhan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/denysdovhan/subscriptions","organizations_url":"https://api.github.com/users/denysdovhan/orgs","repos_url":"https://api.github.com/users/denysdovhan/repos","events_url":"https://api.github.com/users/denysdovhan/events{/privacy}","received_events_url":"https://api.github.com/users/denysdovhan/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/pulls/4/commits","review_comments_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/pulls/4/comments","review_comment_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/pulls/comments{/number}","comments_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/issues/4/comments","statuses_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/statuses/fb5dbabb9f238690205f6b825ec7a93bdd47ad27","head":{"label":"denysdovhan:03-functions","ref":"03-functions","sha":"fb5dbabb9f238690205f6b825ec7a93bdd47ad27","user":{"login":"denysdovhan","id":3459374,"avatar_url":"https://avatars.githubusercontent.com/u/3459374?v=3","gravatar_id":"","url":"https://api.github.com/users/denysdovhan","html_url":"https://github.com/denysdovhan","followers_url":"https://api.github.com/users/denysdovhan/followers","following_url":"https://api.github.com/users/denysdovhan/following{/other_user}","gists_url":"https://api.github.com/users/denysdovhan/gists{/gist_id}","starred_url":"https://api.github.com/users/denysdovhan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/denysdovhan/subscriptions","organizations_url":"https://api.github.com/users/denysdovhan/orgs","repos_url":"https://api.github.com/users/denysdovhan/repos","events_url":"https://api.github.com/users/denysdovhan/events{/privacy}","received_events_url":"https://api.github.com/users/denysdovhan/received_events","type":"User","site_admin":false},"repo":{"id":49322520,"name":"understandinges6ua","full_name":"denysdovhan/understandinges6ua","owner":{"login":"denysdovhan","id":3459374,"avatar_url":"https://avatars.githubusercontent.com/u/3459374?v=3","gravatar_id":"","url":"https://api.github.com/users/denysdovhan","html_url":"https://github.com/denysdovhan","followers_url":"https://api.github.com/users/denysdovhan/followers","following_url":"https://api.github.com/users/denysdovhan/following{/other_user}","gists_url":"https://api.github.com/users/denysdovhan/gists{/gist_id}","starred_url":"https://api.github.com/users/denysdovhan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/denysdovhan/subscriptions","organizations_url":"https://api.github.com/users/denysdovhan/orgs","repos_url":"https://api.github.com/users/denysdovhan/repos","events_url":"https://api.github.com/users/denysdovhan/events{/privacy}","received_events_url":"https://api.github.com/users/denysdovhan/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/denysdovhan/understandinges6ua","description":"Ukrainian translation of “Understanding ES6” by @nzakas","fork":false,"url":"https://api.github.com/repos/denysdovhan/understandinges6ua","forks_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/forks","keys_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/keys{/key_id}","collaborators_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/teams","hooks_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/hooks","issue_events_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/issues/events{/number}","events_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/events","assignees_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/assignees{/user}","branches_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/branches{/branch}","tags_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/tags","blobs_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/git/refs{/sha}","trees_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/git/trees{/sha}","statuses_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/statuses/{sha}","languages_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/languages","stargazers_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/stargazers","contributors_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/contributors","subscribers_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/subscribers","subscription_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/subscription","commits_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/commits{/sha}","git_commits_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/git/commits{/sha}","comments_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/comments{/number}","issue_comment_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/issues/comments{/number}","contents_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/contents/{+path}","compare_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/compare/{base}...{head}","merges_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/merges","archive_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/downloads","issues_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/issues{/number}","pulls_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/pulls{/number}","milestones_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/milestones{/number}","notifications_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/labels{/name}","releases_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/releases{/id}","deployments_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/deployments","created_at":"2016-01-09T11:57:24Z","updated_at":"2016-04-15T04:34:49Z","pushed_at":"2016-05-01T21:11:32Z","git_url":"git://github.com/denysdovhan/understandinges6ua.git","ssh_url":"git@github.com:denysdovhan/understandinges6ua.git","clone_url":"https://github.com/denysdovhan/understandinges6ua.git","svn_url":"https://github.com/denysdovhan/understandinges6ua","homepage":"http://understandinges6.denysdovhan.com","size":1709,"stargazers_count":21,"watchers_count":21,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":6,"mirror_url":null,"open_issues_count":12,"forks":6,"open_issues":12,"watchers":21,"default_branch":"master"}},"base":{"label":"denysdovhan:master","ref":"master","sha":"148f3bbd927b0a74cae94344e6f402c04c97e4f8","user":{"login":"denysdovhan","id":3459374,"avatar_url":"https://avatars.githubusercontent.com/u/3459374?v=3","gravatar_id":"","url":"https://api.github.com/users/denysdovhan","html_url":"https://github.com/denysdovhan","followers_url":"https://api.github.com/users/denysdovhan/followers","following_url":"https://api.github.com/users/denysdovhan/following{/other_user}","gists_url":"https://api.github.com/users/denysdovhan/gists{/gist_id}","starred_url":"https://api.github.com/users/denysdovhan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/denysdovhan/subscriptions","organizations_url":"https://api.github.com/users/denysdovhan/orgs","repos_url":"https://api.github.com/users/denysdovhan/repos","events_url":"https://api.github.com/users/denysdovhan/events{/privacy}","received_events_url":"https://api.github.com/users/denysdovhan/received_events","type":"User","site_admin":false},"repo":{"id":49322520,"name":"understandinges6ua","full_name":"denysdovhan/understandinges6ua","owner":{"login":"denysdovhan","id":3459374,"avatar_url":"https://avatars.githubusercontent.com/u/3459374?v=3","gravatar_id":"","url":"https://api.github.com/users/denysdovhan","html_url":"https://github.com/denysdovhan","followers_url":"https://api.github.com/users/denysdovhan/followers","following_url":"https://api.github.com/users/denysdovhan/following{/other_user}","gists_url":"https://api.github.com/users/denysdovhan/gists{/gist_id}","starred_url":"https://api.github.com/users/denysdovhan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/denysdovhan/subscriptions","organizations_url":"https://api.github.com/users/denysdovhan/orgs","repos_url":"https://api.github.com/users/denysdovhan/repos","events_url":"https://api.github.com/users/denysdovhan/events{/privacy}","received_events_url":"https://api.github.com/users/denysdovhan/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/denysdovhan/understandinges6ua","description":"Ukrainian translation of “Understanding ES6” by @nzakas","fork":false,"url":"https://api.github.com/repos/denysdovhan/understandinges6ua","forks_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/forks","keys_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/keys{/key_id}","collaborators_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/teams","hooks_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/hooks","issue_events_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/issues/events{/number}","events_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/events","assignees_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/assignees{/user}","branches_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/branches{/branch}","tags_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/tags","blobs_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/git/refs{/sha}","trees_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/git/trees{/sha}","statuses_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/statuses/{sha}","languages_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/languages","stargazers_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/stargazers","contributors_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/contributors","subscribers_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/subscribers","subscription_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/subscription","commits_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/commits{/sha}","git_commits_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/git/commits{/sha}","comments_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/comments{/number}","issue_comment_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/issues/comments{/number}","contents_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/contents/{+path}","compare_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/compare/{base}...{head}","merges_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/merges","archive_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/downloads","issues_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/issues{/number}","pulls_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/pulls{/number}","milestones_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/milestones{/number}","notifications_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/labels{/name}","releases_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/releases{/id}","deployments_url":"https://api.github.com/repos/denysdovhan/understandinges6ua/deployments","created_at":"2016-01-09T11:57:24Z","updated_at":"2016-04-15T04:34:49Z","pushed_at":"2016-05-01T21:11:32Z","git_url":"git://github.com/denysdovhan/understandinges6ua.git","ssh_url":"git@github.com:denysdovhan/understandinges6ua.git","clone_url":"https://github.com/denysdovhan/understandinges6ua.git","svn_url":"https://github.com/denysdovhan/understandinges6ua","homepage":"http://understandinges6.denysdovhan.com","size":1709,"stargazers_count":21,"watchers_count":21,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":6,"mirror_url":null,"open_issues_count":12,"forks":6,"open_issues":12,"watchers":21,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/denysdovhan/understandinges6ua/pulls/4"},"html":{"href":"https://github.com/denysdovhan/understandinges6ua/pull/4"},"issue":{"href":"https://api.github.com/repos/denysdovhan/understandinges6ua/issues/4"},"comments":{"href":"https://api.github.com/repos/denysdovhan/understandinges6ua/issues/4/comments"},"review_comments":{"href":"https://api.github.com/repos/denysdovhan/understandinges6ua/pulls/4/comments"},"review_comment":{"href":"https://api.github.com/repos/denysdovhan/understandinges6ua/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/denysdovhan/understandinges6ua/pulls/4/commits"},"statuses":{"href":"https://api.github.com/repos/denysdovhan/understandinges6ua/statuses/fb5dbabb9f238690205f6b825ec7a93bdd47ad27"}}}}