Ð ES-2015 пÑедÑÑмоÑÑÐµÐ½Ñ Ð½Ð¾Ð²Ñе ÑпоÑÐ¾Ð±Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑеменнÑÑ
: ÑеÑез let и const вмеÑÑо var.
ÐапÑимеÑ:
let a = 5;
let
У обÑÑвлений пеÑеменной ÑеÑез let еÑÑÑ ÑÑи оÑновнÑÑ
оÑлиÑÐ¸Ñ Ð¾Ñ var:
-
ÐблаÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾ÑÑи пеÑеменной
letâ блок{...}.Ðак Ð¼Ñ Ð¿Ð¾Ð¼Ð½Ð¸Ð¼, пеÑеменнаÑ, обÑÑÐ²Ð»ÐµÐ½Ð½Ð°Ñ ÑеÑез
var, видна везде в ÑÑнкÑии.ÐеÑеменнаÑ, обÑÑÐ²Ð»ÐµÐ½Ð½Ð°Ñ ÑеÑез
let, видна ÑолÑко в ÑÐ°Ð¼ÐºÐ°Ñ Ð±Ð»Ð¾ÐºÐ°{...}, в коÑоÑом обÑÑвлена.ÐÑо, в ÑаÑÑноÑÑи, влиÑÐµÑ Ð½Ð° обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð²Ð½ÑÑÑи
if,whileилиfor.ÐапÑимеÑ, пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑеÑез
var:var apples = 5; if (true) { var apples = 10; alert(apples); // 10 (внÑÑÑи блока) } alert(apples); // 10 (ÑнаÑÑжи блока Ñо же Ñамое)РпÑимеÑе вÑÑе
applesâ одна пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ð° веÑÑ ÐºÐ¾Ð´, коÑоÑÐ°Ñ Ð¼Ð¾Ð´Ð¸ÑиÑиÑÑеÑÑÑ Ð²if.То же Ñамое Ñ
letбÑÐ´ÐµÑ ÑабоÑаÑÑ Ð¿Ð¾-дÑÑгомÑ:let apples = 5; // (*) if (true) { let apples = 10; alert(apples); // 10 (внÑÑÑи блока) } alert(apples); // 5 (ÑнаÑÑжи блока знаÑение не изменилоÑÑ)ÐдеÑÑ, ÑакÑиÑеÑки, две незавиÑимÑе пеÑеменнÑе
apples, одна â глобалÑнаÑ, вÑоÑÐ°Ñ â в блокеif.ÐамеÑим, ÑÑо еÑли обÑÑвление
let applesв пеÑвой ÑÑÑоке(*)ÑдалиÑÑ, Ñо в поÑледнемalertбÑÐ´ÐµÑ Ð¾Ñибка: пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ опÑеделена:if (true) { let apples = 10; alert(apples); // 10 (внÑÑÑи блока) } alert(apples); // оÑибка!ÐÑо поÑÐ¾Ð¼Ñ ÑÑо пеÑеменнаÑ
letвÑегда видна именно в Ñом блоке, где обÑÑвлена, и не более. -
ÐеÑеменнаÑ
letвидна ÑолÑко поÑле обÑÑвлениÑ.Ðак Ð¼Ñ Ð¿Ð¾Ð¼Ð½Ð¸Ð¼, пеÑеменнÑе
varÑÑÑеÑÑвÑÑÑ Ð¸ до обÑÑвлениÑ. Ðни ÑавнÑundefined:alert(a); // undefined var a = 5;С пеÑеменнÑми
letвÑÑ Ð¿ÑоÑе. Ðо обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¸Ñ Ð²Ð¾Ð¾Ð±Ñе неÑ.Такой доÑÑÑп пÑиведÑÑ Ðº оÑибке:
alert(a); // оÑибка, Ð½ÐµÑ Ñакой пеÑеменной let a = 5;ÐамеÑим Ñакже, ÑÑо пеÑеменнÑе
letнелÑÐ·Ñ Ð¿Ð¾Ð²ÑоÑно обÑÑвлÑÑÑ. То еÑÑÑ, Ñакой код вÑÐ²ÐµÐ´ÐµÑ Ð¾ÑибкÑ:let x; let x; // оÑибка: пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ x Ñже обÑÑвленаÐÑо â Ñ Ð¾ÑÑ Ð¸ вÑглÑÐ´Ð¸Ñ Ð¾Ð³ÑаниÑением по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ
var, но на Ñамом деле пÑоблем не ÑоздаÑÑ. ÐапÑимеÑ, два ÑÐ°ÐºÐ¸Ñ Ñикла ÑовÑем не конÑликÑÑÑÑ:// каждÑй Ñикл Ð¸Ð¼ÐµÐµÑ ÑÐ²Ð¾Ñ Ð¿ÐµÑеменнÑÑ i for(let i = 0; i<10; i++) { /* ⦠*/ } for(let i = 0; i<10; i++) { /* ⦠*/ } alert( i ); // оÑибка: глобалÑной i неÑÐÑи обÑÑвлении внÑÑÑи Ñикла пеÑеменнаÑ
iбÑÐ´ÐµÑ Ð²Ð¸Ð´Ð½Ð° ÑолÑко в блоке Ñикла. Ðна не видна ÑнаÑÑжи, поÑÑÐ¾Ð¼Ñ Ð±ÑÐ´ÐµÑ Ð¾Ñибка в поÑледнемalert. -
ÐÑи иÑполÑзовании в Ñикле, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ иÑеÑаÑии ÑоздаÑÑÑÑ ÑÐ²Ð¾Ñ Ð¿ÐµÑеменнаÑ.
ÐеÑеменнаÑ
varâ одна на вÑе иÑеÑаÑии Ñикла и видна даже поÑле Ñикла:for(var i=0; i<10; i++) { /* ⦠*/ } alert(i); // 10С пеÑеменной
letâ вÑÑ Ð¿Ð¾-дÑÑгомÑ.ÐÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð¿Ð¾Ð²ÑоÑÐµÐ½Ð¸Ñ Ñикла ÑооÑвеÑÑÑвÑÐµÑ ÑÐ²Ð¾Ñ Ð½ÐµÐ·Ð°Ð²Ð¸ÑÐ¸Ð¼Ð°Ñ Ð¿ÐµÑеменнаÑ
let. ÐÑли внÑÑÑи Ñикла еÑÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñе обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ ÑÑнкÑий, Ñо в замÑкании каждой бÑÐ´ÐµÑ Ñа пеÑеменнаÑ, коÑоÑÐ°Ñ Ð±Ñла пÑи ÑооÑвеÑÑÑвÑÑÑей иÑеÑаÑии.ÐÑо позволÑÐµÑ Ð»ÐµÐ³ÐºÐ¾ ÑеÑиÑÑ ÐºÐ»Ð°ÑÑиÑеÑкÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ Ð·Ð°Ð¼ÑканиÑми, опиÑаннÑÑ Ð² задаÑе ÐÑÐ¼Ð¸Ñ ÑÑнкÑий.
function makeArmy() { let shooters = []; for (let i = 0; i < 10; i++) { shooters.push(function() { alert( i ); // вÑÐ²Ð¾Ð´Ð¸Ñ Ñвой Ð½Ð¾Ð¼ÐµÑ }); } return shooters; } var army = makeArmy(); army[0](); // 0 army[5](); // 5ÐÑли Ð±Ñ Ð¾Ð±ÑÑвление бÑло
var i, Ñо бÑла Ð±Ñ Ð¾Ð´Ð½Ð° пеÑеменнаÑiна вÑÑ ÑÑнкÑиÑ, и вÑÐ·Ð¾Ð²Ñ Ð² поÑÐ»ÐµÐ´Ð½Ð¸Ñ ÑÑÑÐ¾ÐºÐ°Ñ Ð²Ñводили бÑ10(подÑобнее â Ñм. задаÑÑ ÐÑÐ¼Ð¸Ñ ÑÑнкÑий).РвÑÑе обÑÑвление
let iÑоздаÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ повÑоÑÐµÐ½Ð¸Ñ Ð±Ð»Ð¾ÐºÐ° в Ñикле ÑÐ²Ð¾Ñ Ð¿ÐµÑеменнÑÑ, коÑоÑÑÑ ÑÑнкÑÐ¸Ñ Ð¸ полÑÑÐ°ÐµÑ Ð¸Ð· замÑÐºÐ°Ð½Ð¸Ñ Ð² поÑÐ»ÐµÐ´Ð½Ð¸Ñ ÑÑÑÐ¾ÐºÐ°Ñ .
const
ÐбÑÑвление const задаÑÑ ÐºÐ¾Ð½ÑÑанÑÑ, Ñо еÑÑÑ Ð¿ÐµÑеменнÑÑ, коÑоÑÑÑ Ð½ÐµÐ»ÑÐ·Ñ Ð¼ÐµÐ½ÑÑÑ:
const apple = 5;
apple = 10; // оÑибка
РоÑÑалÑном обÑÑвление const полноÑÑÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñно let.
ÐамеÑим, ÑÑо еÑли в конÑÑанÑÑ Ð¿ÑиÑвоен обÑекÑ, Ñо Ð¾Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð°ÑиÑена Ñама конÑÑанÑа, но не ÑвойÑÑва внÑÑÑи неÑ:
const user = {
name: "ÐаÑÑ"
};
user.name = "ÐеÑÑ"; // допÑÑÑимо
user = 5; // нелÑзÑ, бÑÐ´ÐµÑ Ð¾Ñибка
То же Ñамое веÑно, еÑли конÑÑанÑе пÑиÑвоен маÑÑив или дÑÑгое обÑекÑное знаÑение.
ÐонÑÑанÑÑ, коÑоÑÑе жÑÑÑко Ð·Ð°Ð´Ð°Ð½Ñ Ð²Ñегда, во вÑÐµÐ¼Ñ Ð²Ñей пÑогÑаммÑ, обÑÑно пиÑÑÑÑÑ Ð² веÑÑ
нем ÑегиÑÑÑе. ÐапÑимеÑ: const ORANGE = "#ffa500".
ÐолÑÑинÑÑво пеÑеменнÑÑ
â конÑÑанÑÑ Ð² дÑÑгом ÑмÑÑле: они не менÑÑÑÑÑ Ð¿Ð¾Ñле пÑиÑвоениÑ. Ðо пÑи ÑазнÑÑ
запÑÑкаÑ
ÑÑнкÑии ÑÑо знаÑение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑазнÑм. ÐÐ»Ñ ÑакиÑ
пеÑеменнÑÑ
можно иÑполÑзоваÑÑ const и обÑÑнÑе ÑÑÑоÑнÑе бÑÐºÐ²Ñ Ð² имени.
ÐÑого
ÐеÑеменнÑе let:
- ÐÐ¸Ð´Ð½Ñ ÑолÑко поÑле обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¸ ÑолÑко в ÑекÑÑем блоке.
- ÐелÑÐ·Ñ Ð¿ÐµÑеобÑÑвлÑÑÑ (в Ñом же блоке).
- ÐÑи обÑÑвлении пеÑеменной в Ñикле
for(let â¦)â она видна ÑолÑко в ÑÑом Ñикле. ÐÑиÑÑм каждой иÑеÑаÑии ÑооÑвеÑÑÑвÑÐµÑ ÑÐ²Ð¾Ñ Ð¿ÐµÑеменнаÑlet.
ÐеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ const â ÑÑо конÑÑанÑа, в оÑÑалÑном â как let.

ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)