SORU
14 EYLÜL 2008, Pazar


's "ile" deyimi JavaScript için meşru kullanan var mı?

*5* statement ile ilgili cevabımı yanıt Alan Storm's comments beni düşündürüyor. Nadiren bu özel dil özelliği kullanmak için bir sebep buldum, ve asla fazla sorun neden olabilir nasıl düşündü. Şimdi, onun tuzaklar kaçınarak with etkili bir şekilde kullanmak nasıl olarak merak ediyorum.

Nerede with deyimi yararlı buldunuz mu?

CEVAP
8 EKİM 2008, ÇARŞAMBA


Başka bir web heyecanla aradım ve mevcut bir söz buldum, bu yüzden benim için bugün oluştu: Defining Variables inside Block Scope.

Arka plan

JavaScript, yüzeysel benzerliğe rağmen C ve C , tanımlı oldukları blok değişkenleri değil kapsam:

var name = "Joe";
if ( true )
{
   var name = "Jack";
}
// name now contains "Jack"

Bir döngü içinde bir kapatma ilan ediyor bu hatalar neden olabilir ortak bir görev

for (var i=0; i<3;   i)
{
   var num = i;
   setTimeout(function() { alert(num); }, 10);
}

Döngü için yeni bir kapsam tanıtmak için aynı num - 2 - değeri ile tüm üç işlevi tarafından paylaşılacaktır.

Yeni bir kapsam: let with

ES6 let deyimi tanıtımı ile kolay, gerektiğinde yeni bir kapsam bu sorunları önlemek için tanıtmak hale geliyor

// variables introduced in this statement 
// are scoped to each iteration of the loop
for (let i=0; i<3;   i)
{
   setTimeout(function() { alert(num); }, 10);
}

Hatta:

for (var i=0; i<3;   i)
{
   // variables introduced in this statement 
   // are scoped to the block containing it.
   let num = i;
   setTimeout(function() { alert(num); }, 10);
}

ES6 evrensel olarak kullanılabilir duruma gelene kadar, bu kullanın yeni tarayıcılar ve geliştiriciler transpilers kullanmaya istekli sınırlı kalır. Ancak, kolayca bu davranış with kullanarak taklit edebiliriz:

for (var i=0; i<3;   i)
{
   // object members introduced in this statement 
   // are scoped to the block following it.
   with ({num: i})
   {
      setTimeout(function() { alert(num); }, 10);
   }
}

Döngü şimdi amaçlandığı gibi, 2 0 değerleri ile üç ayrı değişken oluşturmaya çalışıyor. Bildirilen değişkenler unutmayıniçindeblok kapsamı, C blok davranışını (C, değişkenler bir blok başında beyan edilmelidir, bir şekilde benzer yani) farklı değildir. Bu davranış aslında let block syntax Mozilla tarayıcılarına önceki sürümlerde sunulan oldukça benzer, ama yaygın değil başka bir yerde.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • joshsnice

    joshsnice

    28 Kasım 2006
  • Mark Halberstadt

    Mark Halbers

    19 ŞUBAT 2010
  • superflyy88

    superflyy88

    8 ŞUBAT 2009