Baseline Widely available
ÐиÑекÑива let
обÑÑвлÑÐµÑ Ð¿ÐµÑеменнÑÑ Ñ Ð±Ð»Ð¾Ñной облаÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑÑ Ð¸Ð½Ð¸ÑиализиÑоваÑÑ ÐµÑ Ð·Ð½Ð°Ñением.
let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]];ÐаÑамеÑÑÑ
var1
, var2
, â¦, varN
ÐÐ¼Ñ Ð¿ÐµÑеменной. ÐÐ¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð»Ñбой допÑÑÑимÑй иденÑиÑикаÑоÑ.
value1
, value2
, â¦, valueN
ÐнаÑение пеÑеменной. ÐÑбое допÑÑÑимое вÑÑажение.
ÐиÑекÑива let
позволÑÐµÑ Ð¾Ð±ÑÑвиÑÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑÑ Ð¿ÐµÑеменнÑÑ Ñ Ð¾Ð±Ð»Ð°ÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи, огÑаниÑенной ÑекÑÑим блоком кода . РоÑлиÑие Ð¾Ñ ÐºÐ»ÑÑевого Ñлова var
, коÑоÑое обÑÑвлÑÐµÑ Ð¿ÐµÑеменнÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»Ñно или локалÑно во вÑей ÑÑнкÑии, незавиÑимо Ð¾Ñ Ð¾Ð±Ð»Ð°ÑÑи блока.
ÐбÑÑÑнение, поÑÐµÐ¼Ñ Ð±Ñло вÑбÑано название "let" можно найÑи здеÑÑ.
ÐÑавила облаÑÑи видимоÑÑиÐблаÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи пеÑеменнÑÑ
, обÑÑвленнÑÑ
клÑÑевÑм Ñловом let
, ÑвлÑеÑÑÑ Ð±Ð»Ð¾Ðº, в коÑоÑом они обÑÑвленÑ, и вÑе его подблоки. Ð ÑÑом ÑабоÑа диÑекÑива let
ÑÑ
ожа Ñ ÑабоÑой диÑекÑÐ¸Ð²Ñ var
. ÐÑÐ½Ð¾Ð²Ð½Ð°Ñ ÑазниÑа заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо облаÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи пеÑеменной, обÑÑвленной диÑекÑивой var
, ÑвлÑеÑÑÑ Ð²ÑÑ ÑÑнкÑиÑ, в коÑоÑой она обÑÑвлена:
function varTest() {
var x = 1;
if (true) {
var x = 2; // Ñа же пеÑеменнаÑ!
console.log(x); // 2
}
console.log(x); // 2
}
function letTest() {
let x = 1;
if (true) {
let x = 2; // дÑÑÐ³Ð°Ñ Ð¿ÐµÑеменнаÑ
console.log(x); // 2
}
console.log(x); // 1
}
ЧиÑе код во вложеннÑÑ
ÑÑнкÑиÑÑ
let
иногда Ð´ÐµÐ»Ð°ÐµÑ ÐºÐ¾Ð´ ÑиÑе пÑи иÑполÑзовании вложеннÑÑ
ÑÑнкÑий.
var list = document.getElementById("list");
for (let i = 1; i <= 5; i++) {
let item = document.createElement("li");
item.appendChild(document.createTextNode("Item " + i));
item.onclick = function (ev) {
console.log("Item " + i + " is clicked.");
};
list.appendChild(item);
}
// ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ñакой же ÑÑÑÐµÐºÑ Ñ Ð¸ÑполÑзованием 'var'
// необÑ
одимо ÑоздаÑÑ Ð½Ð¾Ð²Ñй конÑекÑÑ
// иÑполÑзÑÑ Ð·Ð°Ð¼Ñкание, ÑÑÐ¾Ð±Ñ ÑоÑ
ÑаниÑÑ Ð·Ð½Ð°Ñение неизменÑннÑм
for (var i = 1; i <= 5; i++) {
var item = document.createElement("li");
item.appendChild(document.createTextNode("Item " + i));
(function (i) {
item.onclick = function (ev) {
console.log("Item " + i + " is clicked.");
};
})(i);
list.appendChild(item);
}
ÐÑÐ¸Ð¼ÐµÑ Ð²ÑÑе бÑÐ´ÐµÑ Ð²Ñполнен как и ожидаеÑÑÑ, Ñак как пÑÑÑ ÑкземплÑÑов внÑÑÑенней ÑÑнкÑии (анонимной) бÑдÑÑ ÑÑÑлаÑÑÑÑ Ð½Ð° пÑÑÑ ÑазнÑÑ
ÑкземплÑÑов пеÑеменной i
. ÐÑÐ¸Ð¼ÐµÑ Ð±ÑÐ´ÐµÑ Ð²Ñполнен невеÑно, еÑли замениÑÑ Ð´Ð¸ÑекÑÐ¸Ð²Ñ let
на var,
или ÑдалиÑÑ Ð¿ÐµÑеменнÑÑ i
из паÑамеÑÑов вложенной ÑÑнкÑии и иÑполÑзоваÑÑ Ð²Ð½ÐµÑнÑÑ Ð¿ÐµÑеменнÑÑ i
во внÑÑÑенней ÑÑнкÑии.
Ðа веÑÑ
нем ÑÑовне ÑкÑипÑов и ÑÑнкÑий let, в оÑлиÑии Ð¾Ñ var, не ÑоздаÑÑ ÑвойÑÑва на глобалÑном обÑекÑе
. ÐапÑимеÑ:
var x = "global_x";
let y = "global_y";
console.log(this.x); // 'global_x'
console.log(this.y); // undefined
РвÑводе пÑогÑÐ°Ð¼Ð¼Ñ Ð±ÑÐ´ÐµÑ Ð¾ÑобÑажено Ñлово "global_x" Ð´Ð»Ñ this.x
, но undefined
Ð´Ð»Ñ this.y
.
ÐÑи взаимодейÑÑвии Ñ ÐºÐ¾Ð½ÑÑÑÑкÑоÑами можно иÑполÑзоваÑÑ Ð²ÑÑажение let
ÑÑÐ¾Ð±Ñ Ð¾ÑкÑÑÑÑ Ð´Ð¾ÑÑÑп к Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð»Ð¸ неÑколÑким пÑиваÑнÑм Ñленам ÑеÑез иÑполÑзование замÑканий:
var SomeConstructor;
{
let privateScope = {};
SomeConstructor = function SomeConstructor() {
this.someProperty = "foo";
privateScope.hiddenProperty = "bar";
};
SomeConstructor.prototype.showPublic = function () {
console.log(this.someProperty); // foo
};
SomeConstructor.prototype.showPrivate = function () {
console.log(privateScope.hiddenProperty); // bar
};
}
var myInstance = new SomeConstructor();
myInstance.showPublic();
myInstance.showPrivate();
console.log(privateScope.hiddenProperty); // error
ÐÑа ÑеÑ
ника позволÑÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑолÑко "ÑÑаÑиÑное" пÑиваÑное ÑоÑÑоÑние - в пÑимеÑе вÑÑе, вÑе ÑкземплÑÑÑ Ð¿Ð¾Ð»ÑÑеннÑе из конÑÑÑÑкÑоÑа SomeConstructor
бÑдÑÑ ÑÑÑлаÑÑÑÑ Ð½Ð° Ð¾Ð´Ð½Ñ Ð¸ ÑÑ Ð¶Ðµ облаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи privateScope
.
let
ÐовÑоÑное обÑÑвление Ñой же пеÑеменной в Ñом же блоке или ÑÑнкÑии пÑиведÑÑ Ðº вÑбÑоÑÑ Ð¸ÑклÑÑÐµÐ½Ð¸Ñ SyntaxError.
if (x) {
let foo;
let foo; // SyntaxError thrown.
}
Ð ÑÑандаÑÑе ECMAScript 2015 пеÑеменнÑе, обÑÑвленнÑе диÑекÑивой let, пеÑеноÑÑÑÑÑ Ð² наÑало блока. Ðо еÑли Ð²Ñ ÑоÑлÑÑеÑÑ Ð² блоке на пеÑеменнÑÑ, до Ñого как она обÑÑвлена диÑекÑивой let, Ñо ÑÑо пÑиведÑÑ Ðº вÑбÑоÑÑ Ð¸ÑклÑÑÐµÐ½Ð¸Ñ ReferenceError
, поÑÐ¾Ð¼Ñ ÑÑо пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ð°Ñ
одиÑÑÑ Ð²Ð¾ "вÑеменной мÑÑÑвой зоне" Ñ Ð½Ð°Ñала блока и до меÑÑа ÐµÑ Ð¾Ð±ÑÑвлениÑ. (РоÑлиÑии Ð¾Ñ Ð¿ÐµÑеменной, обÑÑвленной ÑеÑез var
, коÑоÑÐ°Ñ Ð¿ÑоÑÑо бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð·Ð½Ð°Ñение undefined
)
function do_something() {
console.log(bar); // undefined
console.log(foo); // ReferenceError: foo is not defined
var bar = 1;
let foo = 2;
}
ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑÑолкнÑÑÑÑÑ Ñ Ð¾Ñибкой в опеÑаÑоÑаÑ
блока switch
, Ñак как он Ð¸Ð¼ÐµÐµÑ ÑолÑко один подблок.
switch (x) {
case 0:
let foo;
break;
case 1:
let foo; // ÐÑбÑÐ¾Ñ SyntaxError из-за повÑоÑного обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑеменной
break;
}
ÐÑполÑзование let
в ÑиклаÑ
for
ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÐºÐ»ÑÑевое Ñлово let
Ð´Ð»Ñ Ð¿ÑивÑзки пеÑеменнÑÑ
к локалÑной облаÑÑи видимоÑÑи Ñикла for
. РазниÑа Ñ Ð¸ÑполÑзованием var
в заголовке Ñикла for
, заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо пеÑеменнÑе обÑÑвленнÑе var
, бÑдÑÑ Ð²Ð¸Ð´Ð½Ñ Ð²Ð¾ вÑей ÑÑнкÑии, в коÑоÑой наÑ
одиÑÑÑ ÑÑÐ¾Ñ Ñикл.
var i = 0;
for (let i = i; i < 10; i++) {
console.log(i);
}
ÐÑавила облаÑÑи видимоÑÑи
for (let expr1; expr2; expr3) statement;
Ð ÑÑом пÑимеÑе expr2, *expr3, statement *заклÑÑÐµÐ½Ñ Ð² неÑвнÑй блок, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ Ð±Ð»Ð¾Ðº локалÑнÑÑ
пеÑеменнÑÑ
, обÑÑвленнÑÑ
конÑÑÑÑкÑией let expr1
. ÐÑÐ¸Ð¼ÐµÑ Ð¿ÑиведÑн вÑÑе.
let
vs var
Ðогда let иÑполÑзÑеÑÑÑ Ð²Ð½ÑÑÑи блока, Ñо облаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи пеÑеменной огÑаниÑиваеÑÑÑ ÑÑим блоком. Ðапомним, ÑÑо оÑлиÑие заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо облаÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи пеÑеменнÑÑ , обÑÑвленнÑÑ Ð´Ð¸ÑекÑивой var, ÑвлÑеÑÑÑ Ð²ÑÑ ÑÑнкÑиÑ, в коÑоÑой они бÑли обÑÑвленÑ.
var a = 5;
var b = 10;
if (a === 5) {
let a = 4; // The scope is inside the if-block
var b = 1; // The scope is inside the function
console.log(a); // 4
console.log(b); // 1
}
console.log(a); // 5
console.log(b); // 1
let
в ÑиклаÑ
ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÐºÐ»ÑÑевое Ñлово let
Ð´Ð»Ñ Ð¿ÑивÑзки пеÑеменнÑÑ
к локалÑной облаÑÑи видимоÑÑи Ñикла for
, вмеÑÑо Ñого ÑÑо Ð±Ñ Ð¸ÑполÑзоваÑÑ Ð³Ð»Ð¾Ð±Ð°Ð»ÑнÑе пеÑеменнÑе (обÑÑвленнÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ var
).
for (let i = 0; i < 10; i++) {
console.log(i); // 0, 1, 2, 3, 4 ... 9
}
console.log(i); // i is not defined
ÐеÑÑандаÑÑизиÑованнÑе ÑаÑÑиÑÐµÐ½Ð¸Ñ let
let
блок
ÐÑедÑпÑеждение: ÐоддеÑжка let
блоков бÑла ÑбÑана в Gecko 44 Firefox bug 1023609.
let блок пÑедоÑÑавлÑÐµÑ ÑпоÑоб, аÑÑоÑииÑоваÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñ Ð¿ÐµÑеменнÑми внÑÑÑи облаÑÑи видимоÑÑи ÑÑого блока, без влиÑÐ½Ð¸Ñ Ð½Ð° знаÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеменнÑÑ Ñ Ñеми же именами вне ÑÑого блока.
СинÑакÑиÑlet (var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]]) block;
ÐпиÑание
let
блок пÑедоÑÑавлÑÐµÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи Ð´Ð»Ñ Ð¿ÐµÑеменнÑÑ
. РабоÑа его заклÑÑаеÑÑÑ Ð² пÑивÑзке нÑÐ»Ñ Ð¸Ð»Ð¸ более пеÑеменнÑÑ
к облаÑÑи видимоÑÑи ÑÑого блока кода, дÑÑгими Ñловами, он ÑвлÑеÑÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð¼ опеÑаÑоÑов. ÐÑмеÑим, ÑÑо облаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи пеÑеменнÑÑ
, обÑÑвленнÑÑ
диÑекÑивой var
, в блоке let
, бÑÐ´ÐµÑ Ñой же Ñамой, ÑÑо и еÑли Ð±Ñ ÑÑи пеÑеменнÑе бÑли обÑÑÐ²Ð»ÐµÐ½Ñ Ð²Ð½Ðµ блока let
, инÑми Ñловами облаÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи ÑакиÑ
пеÑеменнÑÑ
по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ ÑвлÑеÑÑÑ ÑÑнкÑиÑ. Скобки в блоке let
ÑвлÑÑÑÑÑ Ð¾Ð±ÑзаÑелÑнÑми. ÐпÑÑкание иÑ
пÑиведÑÑ Ðº ÑинÑакÑиÑеÑкой оÑибке.
var x = 5;
var y = 0;
let (x = x+10, y = 12) {
console.log(x+y); // 27
}
console.log(x + y); // 5
ÐÑавила Ð´Ð»Ñ ÑÑого блока кода аналогиÑÐ½Ñ ÐºÐ°Ðº и Ð´Ð»Ñ Ð»Ñбого дÑÑгого блока кода в JavaScript. Ðн Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ñвои локалÑнÑе пеÑеменнÑе, обÑÑвленнÑе let
.
ÐблаÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи пеÑеменнÑÑ
, обÑÑвленнÑÑ
диÑекÑивой let
, в блоке let
ÑвлÑеÑÑÑ Ñам блок и вÑе подблоки в нем, еÑли они не ÑодеÑÐ¶Ð°Ñ Ð¾Ð±ÑÑвлений пеÑеменнÑÑ
Ñ Ñеми же именами.
let
вÑÑажениÑ
ÐÑедÑпÑеждение: ÐоддеÑжка let вÑÑажений
бÑла ÑбÑана в Gecko 41 Firefox bug 1023609.
let вÑÑажение
позволÑÐµÑ Ð¾Ð±ÑÑвиÑÑ Ð¿ÐµÑеменнÑе Ñ Ð¾Ð±Ð»Ð°ÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи огÑаниÑенной одним вÑÑажением.
let (var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]]) expression;ÐÑимеÑ
ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ let Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑеменнÑÑ , облаÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи коÑоÑÑÑ ÑвлÑеÑÑÑ ÑолÑко одно вÑÑажение:
var a = 5;
let(a = 6) console.log(a); // 6
console.log(a); // 5
ÐÑавила облаÑÑи видимоÑÑи
Рданном let
вÑÑажении:
*expr
*обоÑаÑиваеÑÑÑ Ð² неÑвнÑй блок.
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