JavaScript Let

ECMAScript 2015

ECMAScript 2015, iki önemli JavaScript yeni anahtar kelimesi getirdi:letconst.

Bu iki anahtar kelime, JavaScript'te blok etkisi alanı sağlar (Block Scope) değişkenler (ve sabitler).

ES2015 öncesinde, JavaScript sadece iki tür etkisi alanı türüne sahipti:全局作用域函数作用域.

全局作用域

Küreselİçinde (fonksiyon dışında) tanımlanan değişkenler全局作用域.

Örnek

var carName = "porsche";
// Bu kodda carName kullanılabilir
function myFunction() {
  // Bu kodda carName kullanılabilir
}

Kişisel olarak deneyin

KüreselDeğişkenler, JavaScript programındaki herhangi bir yerden erişilebilir.

函数作用域

Yerelİçinde (fonksiyon içinde) tanımlanan değişkenler函数作用域.

Örnek

// Bu kodda carName kullanılamaz
function myFunction() {
  var carName = "porsche";
  // Buradaki kod carName kullanabilir
}
// Bu kodda carName kullanılamaz

Kişisel olarak deneyin

YerelDeğişkenler, sadece tanımlandıkları fonksiyon içinde erişilebilir.

JavaScript blok etkisi alanı

aracılığıyla var Anahtar kelimeli tanımlamalar blok etkisi alanı yokturEtki alanı.

Blokte {} İç tanımlanan değişkenler, blok dışından erişilebilir.

Örnek

{ 
  var x = 10; 
}
// Burada x kullanılabilir

ES2015 öncesinde, JavaScript blok etkisi alanı olmadı.

Kullanılabilir let Anahtar kelimeli tanımlamalar blok etkisi alanı olan değişkenler sahiptir.

Blokte {} İç tanımlanan değişkenler, blok dışından erişilemez:

Örnek

{ 
  let x = 10;
}
// Burada x kullanılamaz

Değişken yeniden tanımlama

Kullanım var Anahtar kelimeli yeniden tanımlama soruna neden olabilir.

Blokte yeniden tanımlanan değişken, blok dışındaki değişkenleri de yeniden tanımlar:

Örnek

var x = 10;
// Burada x 10'dur
{ 
  var x = 6;
  // Burada x 6'dır
}
// Burada x 6'dır

Kişisel olarak deneyin

Kullanım let Anahtar kelimeli yeniden tanımlama bu sorunu çözebilir.

Blokte yeniden tanımlanan değişken, blok dışındaki değişkenleri yeniden tanımlamaz:

Örnek

var x = 10;
// Burada x 10'dur
{ 
  let x = 6;
  // Burada x 6'dır
}
// Burada x 10'dur

Kişisel olarak deneyin

Tarayıcı desteği

Internet Explorer 11 veya daha eski sürümler tam olarak desteklememektedir. let anahtar kelimeleri tanımlar.

Aşağıdaki tablo, ilk tam olarak destekleyen let Anahtar kelimelerin tarayıcı sürümleri:

Chrome 49 IE / Edge 12 Firefox 44 Safari 11 Opera 36
2016 年 3 月 2015 年 7 月 2015 年 1 月 2017 年 9 月 2016 年 3 月

循环作用域

在循环中使用 var

Örnek

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

Kişisel olarak deneyin

在循环中使用 let

Örnek

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

Kişisel olarak deneyin

在第一个例子中,在循环中使用的变量使用 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 对象。

aracılığıyla var 关键词定义的全局变量属于 window 对象:

Örnek

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

Kişisel olarak deneyin

aracılığıyla let 关键词定义的全局变量不属于 window 对象:

Örnek

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

Kişisel olarak deneyin

重新声明

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

Örnek

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

Kişisel olarak deneyin

aynı etkisi alan, veya aynı blokta, yoluyla let bir var Değişken yeniden tanımlamak izin verilmiyor:

Örnek

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

aynı etkisi alan, veya aynı blokta, yoluyla let bir let Değişken yeniden tanımlamak izin verilmiyor:

Örnek

let x = 10;       // İzin veriliyor
let x = 6;       // 不允许
{
  let x = 10;   // İzin veriliyor
  let x = 6;   // 不允许
}

aynı etkisi alan, veya aynı blokta, yoluyla var bir let Değişken yeniden tanımlamak izin verilmiyor:

Örnek

let x = 10;       // İzin veriliyor
var x = 6;       // İzin verilmiyor
{
  let x = 10;   // İzin veriliyor
  var x = 6;   // İzin verilmiyor
}

Farklı etkisi alanlar veya bloklar arasında let Değişkeni yeniden tanımlamak izin veriliyor:

Örnek

let x = 6;       // İzin veriliyor
{
  let x = 7;   // İzin veriliyor
}
{
  let x = 8;   // İzin veriliyor
}

Kişisel olarak deneyin

Yükseltme

aracılığıyla var tanımlanan değişkenlerYükseltmetepeye. Eğer yükseltme (Hoisting) nedir bilmiyorsanız, yükseltme bölümümüzü öğrenin.

Değişkeni tanımlamadan önce kullanabilirsiniz:

Örnek

// Burada carName kullanabilirsiniz
var carName;

Kişisel olarak deneyin

aracılığıyla let tanımlanan değişkenler tepeye yükseltilmez.

tanımlama sırasında let Değişkeni tanımlamadan önce kullanmak ReferenceError oluşturur.

Değişken bloğun başından itibaren 'geçici ölü' durumunda kalır ve tanımlanana kadar:

Örnek

// Burada carName kullanamazsınız
let carName;