Javascript'te kaldırmayı ne zaman ve nerede kullanmalıyız [kapalı]


11

Javascript'te yeniyim. Javascript'te kaldırma kavramını öğreniyorum. Mozilla web sitesindeki
Javacsript eğiticilerine dayanarak bu kelimeyle karşılaştım . Bu öğreticilere göre, JavaScript'teki değişkenler, istisnasız olarak daha sonra bildirilen bir değişkene başvurabileceğinizdir . Ancak, sorum, istemci tarafı Javascript'te kaldırmayı kullanmanın uygun olduğu durumlar veya Javascript'te kaldırmayı neden kullanmamız gerektiğidir. Avantajları nelerdir.hoisting


1
Araştırmanızı paylaşmak herkese yardımcı olur. Neyi denediğinizi ve neden ihtiyaçlarınızı karşılamadığını bize bildirin. Bu, kendinize yardım etmeye zaman ayırdığınızı gösterir, bizi açık cevapları tekrar etmekten kurtarır ve en önemlisi daha spesifik ve ilgili bir cevap almanıza yardımcı olur. Ayrıca bkz. Nasıl
Sorulur

6
@gnat Tüm araştırmalardan sonra, eğer bu konuyu anlasaydım, bu soruyu neden tartışmak ve anlamak için buraya bu soruyu neden
Rudra

2
@Rudra Bu bir tartışma forumu değil . Dahası, bunu gerçekten araştırdığınızı gösteren bir kanıt göstermediniz.
Doval

5
Evet, ama soru sormak için bir gereklilik değil.
Robert Harvey

2
@Rudra: Bir tartışma forumu olmadığımızı unutmayın . Biz aslında bir Soru-Cevap sitesiyiz. Burada sorulan sorular, Soru-Cevap formatında makul bir şekilde cevaplanabilir olarak değerlendirilmelidir.
Robert Harvey

Yanıtlar:


11

"Kaldırma" teriminin kullanıldığını hiç duymadım. Ben Cherry tarafından bu kaldırma kullanımından bahsediyorsanız: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html , o zaman toplayabildiğimden, Douglas Crockford'u Javascript'ten yankılanıyor : İyi Parçalar ve asla kaldırma aracı kullanmamalısınız . Sonundaki iddiası, tüm değişkenlerin işlevinizin üstünde bildirilmesi gerektiğidir (Crockford ve JSLint'in önerdiği gibi).

Ya da, Bay ChristopherBrown'un sözleriyle, bu, kullanım için bir özellik değil , sadece tarayıcının Javascript'i nasıl yorumladığıyla ilgili bir tuhaflık.

Kısacası: asla ve hiçbir yerde .


1
Öyleyse, bu kavram neden dahil edildi ve bu özellik ne hakkında?
Rudra

@Rudra: David'in bağlı olduğu makaledeki "Bildiriler, İsimler ve Kaldırma" adlı alt konu bunu oldukça iyi ele alıyor gibi görünüyor. Hangi kısım belirsiz?
Robert Harvey

@RobertHarvey Sadece bunu nerede ve ne zaman kullandıklarını bilmek istiyorum. David asla ve hiçbir yerde kullanılmadığını söylüyor, ama neden bir özellik olarak gösteriliyor
Rudra

4
Bir şeyin bir özellik olması iyi bir fikir olduğu anlamına gelmez. "Özelliklerin" gözden düşmesinin birçok nedeni vardır. Muhtemelen mağara adamı günlerinde bile olsa, ekiniz bile görünüşte yararlı bir amaca hizmet etmiyor.
Robert Harvey

1
Kaldırma, derleyici teorisinden, özellikle optimizasyondan bir terimdir. En az 20 yıldır var, ancak Javascript'in bu özelliği tarafından popüler hale getirildi. Bir özellik olarak adlandırılmasaydı, muhtemelen bir hata olurdu.
david.pfx

16

Kaldırma, Javascript'in tarayıcı tarafından nasıl yorumlandığının bir özelliğini tanımlar ve kullanılacak bir özellik değildir.

Javascript'i yorumlarken, tarayıcılar işlevin başlangıcında işlev düzeyindeki değişkenleri kapsamaktadır. Misal:

function AddTwoAndTwo() {
    var two = 2;
    var result = two + two;
    return result;
}

Gönderilen kodda, işlev kapsamının başlangıcında "iki" ve "sonuç" değişkenlerinin her ikisi de vardır (açıkça, orada bildirildikleri gibi.) Ancak, tarayıcılar değişkenleri "kaldırdıklarından", aşağıdakiler yasal Javascript kodu olur .

function AddTwoAndTwo() {
    result = 5;
    alert(result);
    var two = 2;
    var result = two + two;
    return result;
}

Buradaki net etki, bildirmeden önce kullanımda değişkenleriniz olması ve özellikle global kapsam değişkenlerinde karışıklığa neden olabilmesidir. Misal:

var result = 6;

function AddTwoAndTwo() {
    alert(result);  // should this be 6 or undefined?
    var two = 2;
    var result = two + two;
    return result;
}

Karışıklığı önlemek için, bir işlevin üstündeki değişkenlerinizi bildirin.


4
+1: Ben böyle cevap vereceğim. Kullanmak ya da kullanmamak için bir özellik değil, dikkate alınması gereken sadece çevrenin bir özelliği.
scrwtp

1

Neden?

JavaScript'in Blok Kapsamı yoktur , bu neden şeylerin en üstte kaldırılması gerektiğini açıklamalıdır .

Yararlı mı?

Bunu tercih ederseniz:

var someVariable = someVariable || {};

Bunun yerine:

if ( "undefined" !== typeof someVariable ) {
    someVariable = someVariable;
} else {
    someVariable = {};
}

O zaman faydalıdır. Farkında olmasanız bile!

Clearification

İlk örnek böyle bir şeye dönüşecektir:

var someVariable = someVariableValue;

if ( "undefined" !== typeof someVariable ) {
    var someVariableValue = someVariable;
} else {
    var someVariableValue = {};
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.