aboutsummaryrefslogtreecommitdiff
path: root/files/uk/web/javascript/reference/statements/var
diff options
context:
space:
mode:
Diffstat (limited to 'files/uk/web/javascript/reference/statements/var')
-rw-r--r--files/uk/web/javascript/reference/statements/var/index.html226
1 files changed, 226 insertions, 0 deletions
diff --git a/files/uk/web/javascript/reference/statements/var/index.html b/files/uk/web/javascript/reference/statements/var/index.html
new file mode 100644
index 0000000000..5044c8cfc5
--- /dev/null
+++ b/files/uk/web/javascript/reference/statements/var/index.html
@@ -0,0 +1,226 @@
+---
+title: var
+slug: Web/JavaScript/Reference/Statements/var
+tags:
+ - JavaScript
+ - Довідка
+ - Оператор
+translation_of: Web/JavaScript/Reference/Statements/var
+---
+<div><font><font><font><font>{{jsSidebar("Заяви")}}</font></font></font></font></div>
+
+<p><font><font><strong><font><font>Оператор <code>var</code></font></font></strong><font><font> оголошує змінну, з необов'язковим наданням їй початкового значення.</font></font></font></font></p>
+
+<div><font><font><font><font>{{EmbedInteractiveExample ("pages/js/statement-var.html")}}</font></font></font></font></div>
+
+<p class="hidden">Першокод цього прикладу збережено у репозиторії GitHub. Якщо ви хочете долучитися до створення чи поліпшення таких прикладів, пропонуйте нам свої зміни до репозиторію <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a>.</p>
+
+<h2 id="Синтаксис"><font><font><font><font>Синтаксис</font></font></font></font></h2>
+
+<pre class="syntaxbox"><font><font><font><font>var </font></font></font></font><em><font><font><font><font>varname1 [</font></font></font></font></em><font><font><font><font>= </font></font></font></font><em><font><font><font><font>value1] [</font></font></font></font></em><font><font><font><font>, </font></font></font></font><em><font><font><font><font>varname2 [</font></font></font></font></em><font><font><font><font>= </font></font></font></font><em><font><font><font><font>value2] …</font></font></font></font></em><em><font><font><font><font> [</font></font></font></font></em><font><font><font><font>, </font></font></font></font><em><font><font><font><font>varnameN [</font></font></font></font></em><font><font><font><font>= </font></font></font></font><em><font><font><font><font>valueN]]]</font></font></font></font></em><font><font><font><font> ;</font></font></font></font></pre>
+
+<dl>
+ <dt><code>varnameN</code></dt>
+ <dd><font><font><font><font>Ім'я змінної. Може бути </font></font></font><font><font><font>будь-яким дозволеним ідентифікатором.</font></font></font></font></dd>
+</dl>
+
+<dl>
+ <dt><code>valueN</code></dt>
+ <dd><font><font><font><font>Початкове значення змінної. Може бути будь-яким дозволеним виразом. </font></font></font><font><font><font>Якщо відсутнє, початковим значенням буде <em>undefined</em></font></font></font></font><font><font><font><font>.</font></font></font></font></dd>
+</dl>
+
+<h2 id="Опис"><font><font><font><font>Опис</font></font></font></font></h2>
+
+<p><font><font><font><font>Оголошення змінних через <code>var</code> обробляються до виконання будь-якого коду. Це називається підняттям, і обговорюється нижче.</font></font></font></font></p>
+
+<p><font><font><font><font>Область видимості змінної, що її оголошено оператором <code>var</code>, залежить від <em>контексту виконання</em>, це або замикаюча функція, або — якщо змінну оголошено поза межами всіх функцій — глобальний контекст</font></font></font></font><font><font><font><font>. </font></font></font></font><font><font><font><font>Повторне оголошення змінної у JavaScript не скидає її значення.</font></font></font></font></p>
+
+<p><font><font><font><font>Присвоєння значення неоголошеній змінній просто створює її як глобальну змінну (вона стає властивістю глобального об'єкта) під час виконання присвоєння. Відмінності між оголошеними та неоголошеними змінними наступні:</font></font></font></font></p>
+
+<p><font><font><font><font>1. Оголошені змінні обмежені контекстом виконання, в якому їх оголошено. </font></font></font><font><font><font>Неоголошені змінні завжди глобальні.</font></font></font></font></p>
+
+<pre class="brush: js"><font><font><font><font>function x() {
+ y = 1; // у строгому режимі викидає ReferenceError
+ var z = 2;
+}</font></font></font></font>
+<font><font><font><font>
+x();</font></font></font></font>
+<font><font><font><font>
+console.log(y); </font></font></font><font><font><font>// 1</font></font></font></font><font><font><font><font>
+console.log(z); </font></font></font><font><font><font>// викидає ReferenceError: z не визначено за межами x</font></font></font></font></pre>
+
+<p><font><font><font><font>2. Оголошені змінні створюються до виконання будь-якого коду. Н</font><font>еоголошені </font></font></font><font><font><font>не існують до виконання коду, що присвоює їм значення.</font></font></font></font></p>
+
+<pre class="brush: js"><font><font><font><font>console.log(a); </font></font></font><font><font><font>// викидає ReferenceError
+console.log('виконання триває…'); // ніколи не виконається</font></font></font></font>
+</pre>
+
+<pre class="brush: js"><font><font><font><font>var a;
+console.log(a); // "undefined" чи "", залежно від переглядача
+console.log('виконання триває…'); // виконання триває…</font></font></font></font></pre>
+
+<p><font><font><font><font>3. Оголошені змінні є недоступними для налаштування властивостями свого контексту виконання (функціонального чи глобального). </font></font></font><font><font><font>Неоголошені змінні доступні для налаштування (наприклад, їх можна видалити).</font></font></font></font></p>
+
+<pre class="brush: js">var a = 1;
+b = 2;
+
+delete this.а; // у строгому режимі викидає TypeError, поза ним просто не спрацьовує
+delete this.b;
+
+console.log(a, b); // викидає ReferenceError
+// Властивість 'b' була видалена й більше не існує.</pre>
+
+<p><font><font>Через ці відмінності використання неоголошених змінних, ймовірно, матиме несподівані наслідки. </font><font>Тож, </font></font><strong><font><font>рекомендується завжди оголошувати змінні, незалежно від того, чи розташовані вони всередині функціі, чи у глобальній області видимості. </font></font></strong><font><font>У </font></font><a href="/uk/docs/Web/JavaScript/Reference/Strict_mode"><font><font>строгому режимі</font></font></a><font><font> ECMAScript 5</font><font> присвоєння у неоголошену змінну викидає помилку.</font></font></p>
+
+<h3 id="Підняття_var">Підняття var</h3>
+
+<p><font><font>Позаяк оголошення змінних (та й оголошення загалом) обробляються до виконанням будь-якого коду, оголошення змінної будь-де у коді є тотожним оголошенню на його початку. Це також означає, що змінну можна використовувати до того, як вона була оголошена. </font></font><font><font>Ця поведінка називається «підняттям», бо виглядає так, наче оголошення було пересунуто на початок функції чи глобального коду. </font></font></p>
+
+<pre class="brush: js"><font><font>bla = 2;</font></font><font><font>
+var bla;</font></font><font><font>
+</font></font><font><font>
+// ...неявно означає таке:</font></font>
+<font><font>
+var bla;</font></font><font><font>
+bla = 2;</font></font></pre>
+
+<p><font><font>З цієї причини рекомендується завжди оголошувати змінні нагорі їхньої області видимості (на початку тіла функції чи глобального коду), бо так легше зрозуміти, котра змінна належить до області видимості функції (локальна), а яка обчислюється через ланцюжок областей видимості.</font></font></p>
+
+<p><font><font>Важливо зазначити, що підняття стосується оголошення змінної, але не її ініціалізації. Початкове значення дійсно буде присвоєне по виконанні відповідного рядка</font><font>:</font></font></p>
+
+<pre class="brush: js"><font><font><font><font>function</font></font> do_something() {
+ console.log(bar); // undefined</font></font><font><font>
+ var bar = 111;
+ console.log(bar); // 111
+}</font></font>
+
+<font><font>// ...неявно означає таке:</font></font>
+
+<font><font>function</font></font> do_something() {
+ var bar;
+ console.log(bar); // undefined
+ bar = 111;
+ console.log(bar); // 111
+}</pre>
+
+<h2 id="Приклади"><font><font>Приклади</font></font></h2>
+
+<h3 id="Оголошення_та_ініціалізація_двох_змінних"><font><font>Оголошення та ініціалізація двох змінних</font></font></h3>
+
+<pre class="brush: js"><font><font>var a = 0, b = 0;</font></font></pre>
+
+<h3 id="Присвоєння_двом_змінним_одного_рядкового_значення"><font><font>Присвоєння двом змінним одного рядкового значення</font></font></h3>
+
+<pre class="brush: js"><font><font>var a = 'А';</font></font><font><font>
+var b = a;</font></font>
+<font><font>
+// ...те саме, що й:</font></font>
+<font><font>
+var a, b = a = 'А';</font></font></pre>
+
+<p><font><font>Зважайте на порядок:</font></font></p>
+
+<pre class="brush: js"><font><font>var x = y, y = 'А';</font></font><font><font>
+console.log(x, y); </font><font>// undefinedА</font></font></pre>
+
+<p><font><font>Тут </font></font><code>x</code> та<font><font> </font></font><code>y</code> оголошуються до виконання коду, але присвоєння значень відбувається пізніше<font><font>. </font><font>Під час обчислення "</font></font><code>x = y</code><font><font>" змінна </font></font><code>y</code><font><font> вже існує, тому </font></font><code>ReferenceError</code> <font><font>не викидається, а її значенням є <code>undefined</code></font></font><font><font>. </font><font>Отже, змінна </font></font><code>x</code> <font><font>дістане значення <code>undefined</code></font></font><font><font>. Далі змінній <code>y</code> присвоюється значення <code>'А'</code>. Отже, після першого рядка <code>x === undefined &amp;&amp; y === 'A'</code>, звідси результат.</font></font></p>
+
+<h3 id="Ініціалізація_кількох_змінних"><font><font>Ініціалізація кількох змінних</font></font></h3>
+
+<pre class="brush: js"><font><font>var x = 0;</font></font>
+<font><font>function f() {
+ var x = y = 1; // Оголошує x локально; оголошує y глобально.
+}</font></font>
+
+f();
+
+<font><font>console.log (x, y); // 0 1
+
+// У нестрогому режимі:
+// глобальна змінна x, як і очікувалось;
+// Але змінна y просочилась за межі функції!</font></font></pre>
+
+<p>Той самий приклад, але у строгому режимі:</p>
+
+<pre class="brush: js">'use strict';
+
+var x = 0;
+function f() {
+ var x = y = 1; // Викидає ReferenceError у строгому режимі.
+}
+f();
+
+console.log(x, y);</pre>
+
+<h3 id="Неявні_глобальні_змінні_та_область_видимості_зовнішньої_функції"><font><font>Неявні глобальні змінні та область видимості зовнішньої функції</font></font></h3>
+
+<p>Змінні, що виглядають неявними глобальними змінними, можуть бути посиланнями на змінні області видимості зовнішньої функції:</p>
+
+<pre class="brush: js"><font><font><font><font>var x = 0; // оголошує змінну х в межах файлу та присвоює їй значення 0</font></font></font></font>
+<font><font><font><font>
+console.log(typeof z); </font></font></font><font><font><font>// "undefined", позаяк змінна z ще не існує</font></font></font></font>
+<font><font><font><font>
+function a() {</font></font></font></font><font><font><font><font>
+ var y = 2; </font></font></font><font><font><font>// Оголошує змінну y в області видимості функції a, та присвоює їй значення 2</font></font></font></font>
+<font><font><font><font>
+ console.log (x, y); </font></font></font><font><font><font>// 0 2 </font></font></font></font>
+<font><font><font><font>
+ function b() {
+ x = 3; // Присвоює 3 оголошеній в межах файлу змінній x.
+ у = 4; // Присвоює 4 оголошеній зовнішній змінній y.
+ z = 5; // Створює нову глобальну змінну z та присвоює їй значення 5.
+ // (Викидає ReferenceError у строгому режимі.)
+ }</font></font></font></font>
+<font><font><font><font>
+ b(); </font></font></font><font><font><font>// Створює змінну z в глобальній області видимості.</font></font></font></font><font><font><font><font>
+ console.log(x, y, z); </font></font></font><font><font><font>// 3 4 5 </font></font></font></font><font><font><font><font>
+</font></font></font></font>}
+<font><font><font><font>
+a(); </font></font></font><font><font><font>// Також викликає b.
+console.log(x, z); // 3 5
+console.log(typeof y); // "undefined", бо y є локальною змінною функції a</font></font></font></font></pre>
+
+<h2 id="Специфікації">Специфікації</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col"><font><font><font><font>Специфікація</font></font></font></font></th>
+ <th scope="col"><font><font><font><font>Статус</font></font></font></font></th>
+ <th scope="col"><font><font><font><font>Коментар</font></font></font></font></th>
+ </tr>
+ <tr>
+ <td><font><font><font><font>{{SpecName ('ES1')}}</font></font></font></font></td>
+ <td><font><font><font><font>{{Spec2('ES1')}}</font></font></font></font></td>
+ <td>Початкова виознака. Запроваджено у JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td><font><font><font><font>{{SpecName ('ES5.1', '#sec-12.2', 'var statement')}}</font></font></font></font></td>
+ <td><font><font><font><font>{{Spec2('ES5.1')}}</font></font></font></font></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><font><font><font><font>{{SpecName ('ES6', '#sec-variable-statement', 'variable statement')}}</font></font></font></font></td>
+ <td><font><font><font><font>{{Spec2('ES6')}}</font></font></font></font></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><font><font><font><font>{{SpecName ('ESDraft', '#sec-variable-statement', 'variable statement')}}</font></font></font></font></td>
+ <td><font><font><font><font>{{Spec2('ESDraft')}}</font></font></font></font></td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Підтримка_веб-переглядачами">Підтримка веб-переглядачами</h2>
+
+<div class="hidden">Таблиця сумісності на цій сторінці створена зі структурованих даних. Якщо ви хочете долучитися до розробки цих даних, пропонуйте нам свої pull request до репозиторію <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</div>
+
+<p><font><font><font><font>{{Compat ("javascript.statements.var")}}</font></font></font></font></p>
+
+<h2 id="Див._також">Див. також</h2>
+
+<ul>
+ <li>{{jsxref("Statements/let", "let")}}</li>
+ <li>{{jsxref("Statements/const", "const")}}</li>
+</ul>