Baseline Widely available
ÐпеÑаÑÐ¾Ñ var обÑÑвлÑÐµÑ Ð¿ÐµÑеменнÑÑ, иниÑиализиÑÑÑ ÐµÑ Ð¿Ñи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи.
ÐнÑеÑакÑивнÑй пÑимеÑvar x = 1;
if (x === 1) {
var x = 2;
console.log(x);
// Expected output: 2
}
console.log(x);
// Expected output: 2
СинÑакÑиÑ
var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
varnameN
ÐÐ¼Ñ Ð¿ÐµÑеменной. ÐÐ¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð»Ñбой допÑÑÑимÑй иденÑиÑикаÑоÑ.
valueN
ÐнаÑение пеÑеменной. ÐÑбое допÑÑÑимое вÑÑажение. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð½Ð°Ñение undefined.
ÐбÑÑвление пеÑеменной вÑегда обÑабаÑÑваеÑÑÑ Ð´Ð¾ вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð°, где Ð±Ñ Ð¾Ð½Ð° ни наÑ
одилаÑÑ. ÐблаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи пеÑеменной, обÑÑвленной ÑеÑез var
, ÑÑо ÐµÑ ÑекÑÑий конÑекÑÑ Ð²ÑполнениÑ. ÐоÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð³ÑаниÑиваÑÑÑÑ ÑÑнкÑией или бÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑм Ð´Ð»Ñ Ð¿ÐµÑеменнÑÑ
, обÑÑвленнÑÑ
за пÑеделами ÑÑнкÑии.
ÐÑиÑвоение знаÑÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±ÑÑвленной пеÑеменной подÑазÑмеваеÑ, ÑÑо она бÑÐ´ÐµÑ Ñоздана как глобалÑÐ½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ (пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑÑановиÑÑÑ ÑвойÑÑвом глобалÑного обÑекÑа) поÑле вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ Ð·Ð½Ð°ÑениÑ. РазлиÑÐ¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð¾Ð±ÑÑвленной и необÑÑвленной пеÑеменнÑми ÑледÑÑÑие:
1. ÐбÑÑвленнÑе пеÑеменнÑе огÑаниÑÐµÐ½Ñ ÐºÐ¾Ð½ÑекÑÑом вÑполнениÑ, в коÑоÑом они бÑли обÑÑвленÑ. ÐеобÑÑвленнÑе пеÑеменнÑе вÑегда глобалÑнÑ.
function x() {
y = 1; // возбÑÐ´Ð¸Ñ ReferenceError в "ÑÑÑогом Ñежиме"
var z = 2;
}
x();
console.log(y); // вÑÐ²ÐµÐ´ÐµÑ "1"
console.log(z); // возбÑÐ´Ð¸Ñ ReferenceError: z не опÑеделÑн вне x
2. ÐбÑÑвленнÑе пеÑеменнÑе иниÑиализиÑÑÑÑÑÑ Ð´Ð¾ вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð»Ñбого кода. ÐеобÑÑвленнÑе пеÑеменнÑе не ÑÑÑеÑÑвÑÑÑ Ð´Ð¾ ÑÐµÑ Ð¿Ð¾Ñ, пока к ним не вÑполнено пÑиÑваивание.
console.log(a); // ÐозбÑÐ´Ð¸Ñ ReferenceError.
console.log("still going..."); // Ðе вÑполниÑÑÑ.
var a;
console.log(a); // ÐÑÐ²ÐµÐ´ÐµÑ "undefined" или "", в завиÑимоÑÑи Ð¾Ñ Ð±ÑаÑзеÑа.
console.log("still going..."); // ÐÑÐ²ÐµÐ´ÐµÑ "still going...".
3. ÐбÑÑвленнÑе пеÑеменнÑе, незавиÑимо Ð¾Ñ ÐºÐ¾Ð½ÑекÑÑа вÑполнениÑ, ÑвлÑÑÑÑÑ Ð½ÐµÐ½Ð°ÑÑÑаиваемÑми ÑвойÑÑвами. ÐеобÑÑвленнÑе пеÑеменнÑе ÑÑо наÑÑÑаиваемÑе ÑвойÑÑва (Ñ.е. Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑдалÑÑÑ).
var a = 1;
b = 2;
delete this.a; // ÐозбÑÐ´Ð¸Ñ TypeError в "ÑÑÑогом Ñежиме". Ð "неÑÑÑогом Ñежиме" бÑÐ´ÐµÑ Ð¾Ñибка без ÑведомлениÑ.
delete this.b;
console.log(a, b); // ÐозбÑÐ´Ð¸Ñ ReferenceError.
// СвойÑÑво 'b' бÑло Ñдалено и болÑÑе не ÑÑÑеÑÑвÑеÑ.
Ðз-за пеÑеÑиÑленнÑÑ ÑазлиÑий, иÑполÑзование необÑÑвленнÑÑ Ð¿ÐµÑеменнÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к непÑедÑказÑемÑм поÑледÑÑвиÑм. Рекомендовано вÑегда обÑÑвлÑÑÑ Ð¿ÐµÑеменнÑе, вне завиÑимоÑÑи, Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð¾Ð½Ð¸ внÑÑÑи ÑÑнкÑии или в глобалÑном конÑекÑÑе. ÐÑиÑваивание знаÑÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±ÑÑвленной пеÑеменной в ÑÑÑогом Ñежиме ECMAScript 5 возбÑÐ¶Ð´Ð°ÐµÑ Ð¾ÑибкÑ.
ÐоднÑÑие пеÑеменнÑÑÐбÑÑвление пеÑеменнÑÑ (как и лÑбÑе дÑÑгие обÑÑвлениÑ) обÑабаÑÑваÑÑÑÑ Ð´Ð¾ вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð°. Ðде Ð±Ñ Ð½Ð¸ Ð½Ð°Ñ Ð¾Ð´Ð¸Ð»Ð¾ÑÑ Ð¾Ð±ÑÑвление, ÑÑо ÑавнознаÑно ÑомÑ, ÑÑо пеÑеменнÑÑ Ð¾Ð±ÑÑвили в Ñамом наÑале кода. ÐÑо знаÑиÑ, ÑÑо пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑÑановиÑÑÑ Ð´Ð¾ÑÑÑпной до Ñого, как она обÑÑвлена. Такое поведение назÑваеÑÑÑ "поднÑÑием" (в некоÑоÑÑÑ Ð¸ÑÑоÑÐ½Ð¸ÐºÐ°Ñ "вÑплÑÑием").
bla = 2;
var bla;
// ...
// ÑиÑаеÑÑÑ ÐºÐ°Ðº:
var bla;
bla = 2;
ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑÑвление пеÑеменнÑÑ Ñекомендовано вÑноÑиÑÑ Ð² наÑало Ð¸Ñ Ð¾Ð±Ð»Ð°ÑÑи видимоÑÑи (в наÑало глобалÑного кода или в наÑало ÑÑнкÑии). ÐÑо даÑÑ Ð¿Ð¾Ð½ÑÑÑ, какие пеÑеменнÑе пÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð°Ñ ÑÑнкÑии (Ñ.е. ÑвлÑÑÑÑÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑми), а какие обÑабаÑÑваÑÑÑÑ Ð² Ñепи облаÑÑей видимоÑÑи (Ñ.е. ÑвлÑÑÑÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑми).
Ðажно оÑмеÑиÑÑ, ÑÑо подÑем бÑÐ´ÐµÑ Ð²Ð»Ð¸ÑÑÑ Ð½Ð° обÑÑвление пеÑеменной, но не на иниÑиализаÑÐ¸Ñ ÐµÑ Ð·Ð½Ð°ÑениÑ. ÐнаÑение пÑиÑваиваеÑÑÑ Ð¿Ñи вÑполнении опеÑаÑоÑа пÑиÑваиваниÑ:
function do_something() {
console.log(bar); // вÑÐ²ÐµÐ´ÐµÑ undefined
var bar = 111;
console.log(bar); // вÑÐ²ÐµÐ´ÐµÑ 111
}
// ...неÑвно понимаеÑÑÑ ÐºÐ°Ðº:
function do_something() {
var bar;
console.log(bar); // вÑÐ²ÐµÐ´ÐµÑ undefined
bar = 111;
console.log(bar); // вÑÐ²ÐµÐ´ÐµÑ 111
}
ÐÑимеÑÑ ÐбÑÑвление и иниÑиализаÑÐ¸Ñ Ð´Ð²ÑÑ
пеÑеменнÑÑ
ÐÑиÑвоение двÑм пеÑеменнÑм одного ÑÑÑокового знаÑениÑ
var a = "A";
var b = a;
// РавнознаÑно:
var a,
b = (a = "A");
СледиÑе за поÑÑдком пÑиÑÐ²Ð¾ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñений пеÑеменнÑм
var x = y,
y = "A";
console.log(x + y); // undefinedA
РпÑимеÑе, x
и y
обÑÑÐ²Ð»ÐµÐ½Ñ Ð´Ð¾ вÑполнение кода, пÑиÑвоение вÑполнÑеÑÑÑ Ð¿Ð¾Ð·Ð¶Ðµ. Ðогда пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿ÑиÑваивание "x = y
", y
Ñже ÑÑÑеÑÑвÑÐµÑ Ñо знаÑением 'undefined
', Ñак ÑÑо оÑибка ReferenceError
не генеÑиÑÑеÑÑÑ. РпеÑеменной x
пÑиÑваиваеÑÑÑ Ð½ÐµÐ¾Ð¿ÑеделÑнное знаÑение. ÐоÑом пеÑеменной y
пÑиÑваиваеÑÑÑ Ð·Ð½Ð°Ñение 'A'. ÐолÑÑаеÑÑÑ, ÑÑо поÑле вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÐµÑвой ÑÑÑоки кода x === undefined && y === 'A'
, оÑÑÑда и ÑезÑлÑÑаÑ.
var x = 0;
function f() {
var x = (y = 1); // x - обÑÑвлÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ñно. y - глобалÑно!
}
f();
console.log(x, y); // 0, 1
// знаÑение x взÑÑо из глобалÑной пеÑеменной, как и ожидалоÑÑ
// знаÑение пеÑеменной y доÑÑÑпно глобалÑно
Такой же пÑимеÑ, но в ÑÑÑогом Ñежиме:
"use strict";
var x = 0;
function f() {
var x = (y = 1); // Throws a ReferenceError in strict mode.
}
f();
console.log(x, y);
ÐеÑвнÑе глобалÑнÑе пеÑеменнÑе и внеÑнÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи
ÐеÑеменнÑе могÑÑ ÑÑÑлаÑÑÑÑ Ð½Ð° пеÑеменнÑе внеÑней облаÑÑи видимоÑÑи ÑÑнкÑии, и ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ð½ÐµÑвно:
var x = 0; // x обÑÑвлена глобалÑно, заÑем пÑиÑваиваеÑÑÑ Ð·Ð½Ð°Ñение 0
console.log(typeof z); // undefined, пока еÑÑ z не ÑÑÑеÑÑвÑеÑ
function a() {
// когда ÑÑнкÑÐ¸Ñ a вÑзвана,
var y = 2; // y обÑÑвлÑеÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ñно в ÑÑнкÑии a, заÑем пÑиÑваиваеÑÑÑ 2
console.log(x, y); // 0 2
function b() {
// когда ÑÑнкÑÐ¸Ñ b вÑзвана
x = 3; // пÑиÑваиваеÑÑÑ 3 ÑÑÑеÑÑвÑÑÑей глобалÑной x
y = 4; // пÑиÑваиваеÑÑÑ 4 ÑÑÑеÑÑвÑÑÑей внеÑней y
z = 5; // ÑоздаÑÑÑÑ Ð½Ð¾Ð²Ð°Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑÐ½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ z и пÑиÑваиваеÑÑÑ Ð·Ð½Ð°Ñение 5.
} // (ÐоÑÐ¾Ð¶Ð´Ð°ÐµÑ ReferenceError в strict mode(ÑÑÑогом Ñежиме).)
b(); // вÑзов b ÑоздаÑÑ z как глобалÑнÑÑ Ð¿ÐµÑеменнÑÑ
console.log(x, y, z); // 3 4 5
}
a(); // вÑзов a Ñакже вÑзÑÐ²Ð°ÐµÑ b
console.log(x, z); // 3 5
console.log(typeof y); // undefined, Ñак как y ÑÑо локалÑÐ½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð´Ð»Ñ ÑÑнкÑии a
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4