diff options
Diffstat (limited to 'files/uk/web/javascript/reference/statements/var')
-rw-r--r-- | files/uk/web/javascript/reference/statements/var/index.html | 226 |
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 && 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> |