Let в JavaScript

ECMAScript 2015

ECMAScript 2015 ввел два важных новых ключевых слова JavaScript:letconst.

Эти ключевые слова в JavaScript предоставляют блоковую область действия (Блоковая область действия) переменные (и константы).

До ES2015 в JavaScript было только два типа области действия:全局作用域函数作用域.

全局作用域

ГлобальнаяПеременные, объявленные (вне функции), имеют全局作用域.

Пример

var carName = "porsche";
// Этот код может использовать carName
function myFunction() {
  // Этот код также может использовать carName
}

попробуйте это亲自

ГлобальнаяПеременные могут быть доступны в любом месте программы JavaScript.

函数作用域

ЛокальнаяПеременные, объявленные (внутри функции), имеют函数作用域.

Пример

// Этот код не может использовать carName
function myFunction() {
  var carName = "porsche";
  // code here CAN use carName
}
// Этот код не может использовать carName

попробуйте это亲自

ЛокальнаяПеременные могут быть доступны только в функции, в которой они объявлены.

Блоковая область действия JavaScript

через var Переменные, объявленные ключевыми словами, не имеют блоковойОбласть действия.

В блоке {} Переменные, объявленные внутри блока, могут быть доступны снаружи блока.

Пример

{ 
  var x = 10; 
}
// Здесь можно использовать x

До ES2015 в JavaScript не было блокового области действия.

Можно использовать let Ключевые слова объявляют переменные с блоковым областью действия.

В блоке {} Переменные, объявленные внутри блока, не могут быть доступными снаружи блока:

Пример

{ 
  let x = 10;
}
// Здесь нельзя использовать x

Переопределение переменных

Использование var Ключевое слово повторного определения переменных вызывает проблемы.

Переопределение переменных в блоке также повторяет определение переменных за пределами блока:

Пример

var x = 10;
// Здесь x равно 10
{ 
  var x = 6;
  // Здесь x равно 6
}
// Здесь x равно 6

попробуйте это亲自

Использование let Ключевое слово повторного определения переменных решает эту проблему.

Переопределение переменных в блоке не повторяет определение переменных за пределами блока:

Пример

var x = 10;
// Здесь x равно 10
{ 
  let x = 6;
  // Здесь x равно 6
}
// Здесь x равно 10

попробуйте это亲自

Поддержка браузеров

Internet Explorer 11 и более ранние версии не поддерживают полностью let ключевые слова.

В таблице определены первые полностью поддерживаемые let Браузерная версия ключевых слов:

Chrome 49 IE / Edge 12 Firefox 44 Safari 11 Opera 36
2016 года 3 марта 2015 года 7 июля 2015 года 1 января 2017 года 9 сентября 2016 года 3 марта

循环作用域

在循环中使用 var:

Пример

var i = 7;
for (var i = 0; i < 10; i++) {
  // 一些语句
}
// 此处,i 为 10

попробуйте это亲自

在循环中使用 let:

Пример

let i = 7;
for (let i = 0; i < 10; i++) {
  // 一些语句
}
// 此处 i 为 7

попробуйте это亲自

在第一个例子中,在循环中使用的变量使用 var 重新声明了循环之外的变量。

在第二个例子中,在循环中使用的变量使用 let 并没有重新声明循环外的变量。

如果在循环中用 let 声明了变量 i,那么只有在循环内,变量 i 才是可见的。

函数作用域

在函数内声明变量时,使用 varlet 很相似。

它们都有函数作用域:

function myFunction() {
  var carName = "porsche";   // 函数作用域
}
function myFunction() {
  let carName = "porsche";   // 函数作用域
}

全局作用域

如果在块外声明声明,那么 varlet 也很相似。

它们都拥有全局作用域:

var x = 10;       // 全局作用域
let y = 6;       // 全局作用域

HTML 中的全局变量

使用 JavaScript 的情况下,全局作用域是 JavaScript 环境。

在 HTML 中,全局作用域是 window 对象。

через var 关键词定义的全局变量属于 window 对象:

Пример

var carName = "porsche";
// 此处的代码可使用 window.carName

попробуйте это亲自

через let 关键词定义的全局变量不属于 window 对象:

Пример

let carName = "porsche";
// 此处的代码不可使用 window.carName

попробуйте это亲自

重新声明

允许在程序的任何位置使用 var 重新声明 JavaScript 变量:

Пример

var x = 10;
// 现在,x 为 10
var x = 6;
// 现在,x 为 6

попробуйте это亲自

в одной и той же области видимости или в одном и том же блоке, через let повторное объявление var Переменные не разрешены:

Пример

var x = 10;       // 允许
let x = 6;       // 不允许
{
  var x = 10;   // 允许
  let x = 6;   // 不允许
}

в одной и той же области видимости или в одном и том же блоке, через let повторное объявление let Переменные не разрешены:

Пример

let x = 10;       // Разрешено
let x = 6;       // 不允许
{
  let x = 10;   // Разрешено
  let x = 6;   // 不允许
}

в одной и той же области видимости или в одном и том же блоке, через var повторное объявление let Переменные не разрешены:

Пример

let x = 10;       // Разрешено
var x = 6;       // Запрещено
{
  let x = 10;   // Разрешено
  var x = 6;   // Запрещено
}

в различных областьях видимости или блока, через let Повторное объявление переменных разрешено:

Пример

let x = 6;       // Разрешено
{
  let x = 7;   // Разрешено
}
{
  let x = 8;   // Разрешено
}

попробуйте это亲自

Подъем

через var Объявленные переменные будутПодъемдо вершины. Если вы не знаете, что такое подъем (Hoisting), изучите нашу главу о подъеме.

Вы можете использовать переменную до ее объявления:

Пример

// В этом месте вы можете использовать carName
var carName;

попробуйте это亲自

через let Определенные переменные не поднимаются на вершину.

в объявлении let Использование переменной до ее объявления приведет к ошибке ReferenceError.

Переменные находятся в "временной смерти" с начала блока до его объявления:

Пример

// В этом месте вы не можете использовать carName
let carName;