Değişkenler

Değişkenler, bir değere temsili ad atayan bir veri yapısıdır. Bunlar herhangi bir türde veriyi içerebilir.

Değişken adlarına tanımlayıcı adı verilir. Geçerli bir tanımlayıcı takip edilmelidir. şu kuralları kabul edin:

  • Tanımlayıcılar; Unicode harfleri, dolar işaretleri ($), alt çizgi içerebilir karakterler (_), rakamlar (0-9) ve hatta bazı Unicode karakterleri içerebilir.
  • Ayrıştırıcı, şunları yapmak için boşluk kullandığından tanımlayıcılar boşluk içeremez: giriş öğelerini ayrı tutun. Örneğin, bir değişkeni myVariable yerine my Variable ise ayrıştırıcı iki tanımlayıcı görür: my ve Variable belirtilerini içerir ve bir söz dizimi hatası ("beklenmeyen jeton: tanımlayıcı").
  • Tanımlayıcılar bir harf, alt çizgi (_) veya dolar işaretiyle ($) başlamalıdır. Sayılar ile karışıklık olmasını önlemek için, sayılarla başlayamazlar. tanımlayıcılar:

    let 1a = true;
    
    > Uncaught SyntaxError: Invalid or unexpected token
    

    JavaScript, bir tanımlayıcının başında sayılara izin verdiyse olarak kullanılan sayılar arasında çakışmalara neden olan, yalnızca sayılardan oluşan tanımlayıcılar tanımlayıcılar olarak kullanılan sayılar ve sayılar:

    let 10 = 20
    
    10 + 5
    > ?
    
  • "Ayrılmış kelimeler" zaten söz dizimsel olarak anlamlı olan tanımlayıcılar tanımlayıcı olarak kullanılamaz.

  • Tanımlayıcılar özel karakterler (! . , / \ + - * =) içeremez.

Aşağıdakiler, tanımlayıcı oluşturmayla ilgili katı kurallar değildir ancak sektöre yönelik en iyi uygulamalarını ele aldık. Özel projenin farklı standartları var. Tutarlılık için bunları takip edin.

JavaScript'in yerleşik yöntem ve özellikleriyle belirlenen örneğe göre deve büyük harf ("kamelCase" olarak da bilinir), birden fazla kelimeden oluşur. Deve örtüsü, bir proje yöneticisinin iyileşme için ilk harfi hariç her kelimenin ilk harfinin büyük yazılması okunabilirliği artırmaktır.

let camelCasedIdentifier = true;

Bazı projelerde bağlama ve projenin yapısına göre farklı adlandırma kuralları kullanılır temsil eder. Örneğin, bir sınıfın ilk harfi genelde büyük harfle yazılır, bu nedenle birden çok kelimeden oluşan sınıf adları genellikle deve kelimesinin farklı bir varyantını kullanır genellikle "büyük harf kullanımı" olarak adlandırılır veya Pascal büyük/küçük harf.

class MyClass {

}

Tanımlayıcılar içerdikleri verilerin yapısını kısa ve öz bir şekilde tanımlamalıdır (örneğin, örneğin, currentMonthDays, theNumberOfDaysInTheCurrentMonth ifadesinden daha iyi bir addır) ve bir bakışta net olarak okuyun (originalValue, val değerinden daha iyidir). İlgili içeriği oluşturmak için kullanılan Bu modül boyunca kullanılan myVariable tanımlayıcılar şu bağlamda çalışır: ancak bunların üretim kodunda pek işe yaramayacağı için içerdikleri veriler hakkında hiçbir bilgi vermezler.

Tanımlayıcılar içerdikleri veriler hakkında çok ayrıntı vermemelidir çünkü değerleri, komut dosyalarının bu veriler üzerinde nasıl hareket ettiğine veya daha iyi kararlar vermenize yardımcı olabilir. Örneğin, başlangıçta miles tanımlayıcısının daha sonra kilometre cinsinden bir değerle değiştirilmesi ve bakımcıların söz konusu değişkene yapılan referansları değiştirerek ve ileride karışıklık olmasını önler. Bunu önlemek için tanımlayıcınız olarak distance kullanın .

JavaScript, kullanılan tanımlayıcılara özel bir ayrıcalık veya anlam alt çizgi karakterleriyle (_) başlar, ancak genellikle bu alt çizgi karakterlerini göstermek için değişken, yöntem veya özellik "gizli" ise yani sadece kullanılan içeriğin bağlamına uygun şekilde söz konusu bağlam dışında erişilen veya değiştirilen) Bu, tüm dünyada benimsenen JavaScript'in eklenmesinden önce ve diğer programlama dillerinden özel mülkler.

Değişken bildirimi

JavaScript'in bir tanımlayıcıdan, bir işlemden ve bir işlemden adı verilen kullanabilirsiniz. Bir değişken; let, const, veya var anahtar kelime.

let myVariable;

İstediğiniz zaman değiştirilebilecek bir değişkeni bildirmek için let veya var kullanın. Bu anahtar kelimeler, JavaScript yorumlayıcısına bir karakter dizesinin veya bir değer içerebilecek tanımlayıcıyı belirtir.

Modern bir kod tabanında çalışırken var yerine let politikasını kullanın. var hâlâ çalışıyor Ancak, kötü amaçlı yazılım sürümü tasarımında tanımlanmış mantıksız bazı JavaScript’in en eski sürümlerini çalıştırıyordu ve daha sonra korumayı sağlar. let, bazı sorunları gidermek için ES6'ya eklendi var.

Beyan edilen değişken, değişkene bir değer atanarak başlatılır. Tekliflerinizi otomatikleştirmek ve optimize etmek için bir değişkene değer atamak veya yeniden atamak için tek eşittir işareti (=) kullanın. Yapabilecekleriniz şunu beyan eden aynı ifadenin bir parçası olarak:

let myVariable = 5;

myVariable + myVariable
> 10

Ayrıca bir değişkeni başlatmadan let (veya var) ile de bildirebilirsiniz sabırsızlanıyorum. Bu durumda, değişkenin başlangıç değeriundefined kod ona bir değer atar.

let myVariable;

myVariable;
> undefined

myVariable = 5;

myVariable + myVariable
> 10

undefined değerine sahip bir değişken, tanımlanmamış bir değişkenden farklı kimliği henüz bildirilmemiş olan kullanıcılar için geçerlidir. Sahibi olmadığınız bir değişkene referans verme bir hataya neden olur.

myVariable
> Uncaught ReferenceError: myVariable is not defined

let myVariable;

myVariable
> undefined

Bir tanımlayıcının bir değerle ilişkilendirilmesine genellikle "bağlama" adı verilir. let, var veya const anahtar kelimelerini izleyen söz dizimine "bağlama listesi", ve birden fazla virgülle ayrılmış değişken bildirimlerine izin verir. (beklenen noktalı virgülle biter). Bu, aşağıdaki kod snippet'lerini işlevsel olarak özdeş:

let firstVariable,
     secondVariable,
     thirdVariable;
let firstVariable;
let secondVariable;
let thirdVariable;

JavaScript kodu kullanıldığından, bir değişkenin değeri yeniden atanırken let (veya var) kullanılmaz değişkenin mevcut olduğunu bilir:

let myVariable = true;

myVariable
> true

myVariable = false;

myVariable
> false

Değişkenlere mevcut değerlerine göre yeni değerler atayabilirsiniz:

let myVariable = 10;

myVariable
> 10

myVariable = myVariable * myVariable;

myVariable
> 100

Üretim ortamında let kullanarak bir değişkeni yeniden bildirmeye çalışırsanız Söz dizimi hatası alırsınız:

let myVariable = true;
let myVariable = false;
> Uncaught SyntaxError: redeclaration of let myVariable

Tarayıcılar geliştirici araçları let (ve class) için yapılan yeniden bildirim işlemleri konusunda daha esnek davranır. Bu nedenle, geliştirici konsolunuzda aynı hatayı görürsünüz.

var, eski tarayıcı uyumluluğunu korumak için gereksiz yeniden bildirime izin verir. hiçbir bağlamda hatasız olarak:

var myVariable = true;
var myVariable = false;

myVariable\
> false

const

Sabit olması gereken bir değişken türü olan sabit değeri tanımlamak için const anahtar kelimesini kullanın. hemen başlatılır ve değiştirilemez. Sabit değerler için tanımlayıcılar let (ve var) kullanılarak tanımlanan değişkenlerle aynı kurallara uymalıdır:

const myConstant = true;

myConstant
> true

Bir sabit değeri hemen bir değer atamadan tanımlayamazsınız. Bunun nedeni, sabit değerler oluşturulduktan sonra yeniden atanamaz. Bu nedenle, değeri sonsuza kadar undefined kalacaktı. Sürekli değeri belirtmeye çalışırsanız başlatmazsanız bir söz dizimi hatası alırsınız:

const myConstant;
Uncaught SyntaxError: missing = in const declaration

const ile tanımlanan bir değişkenin değerini değiştirmek istediğiniz şekilde let (veya var) ile bildirilen wit değişkeninin değerini değiştirme, bir türe neden olur hata:

const myConstant = true;

myConstant = false;
> Uncaught TypeError: invalid assignment to const 'myConstant'

Ancak bir sabit değer bir nesneyle ilişkilendirildiğinde, bu nesnenin özellikleri Nesne değiştirilebilir.

const constantObject = { "firstvalue" : true };

constantObject
> Object { firstvalue: true }

constantObject.secondvalue = false;

constantObject
> Object { firstvalue: true, secondvalue: false }

Nesne içeren sabit değerler değişebilir bir veri değerine referans verin. Sabit değerin kendisi değiştirilemez, ancak referans verilen Nesne değiştirilebilir, eklenebilir veya kaldırılabilir:

const constantObject = { "firstvalue" : true };

constantObject = false
> Uncaught TypeError: invalid assignment to const 'constantObject'

En iyi uygulama, bir değişkenin yeniden atanmasını beklemediğiniz durumlarda değişkendir. const kullanmak, geliştirme ekibinize veya bir aracın gelecekteki ve kodunuzdaki varsayımları yıkmamak için bu değeri değiştirmemeye dikkat edin. kullanım şekli hakkında bilgi verir. Örneğin, bir değişkenin beklenen bir veri türüyle karşılaştırılarak değerlendirilir.

Değişken kapsamı

Değişkenin kapsamı, komut dosyasında değişkenin kullanılabildiği bölümdür. Değişkenlerin kapsamı dışında kalan değişkenler tanımlayıcı olarak değil, tanımlanamaz. sanki bildirilmemiş gibi undefined değeri içeriyor.

Bir değişkeni bildirmek için kullandığınız anahtar kelimeye ve tanımlamayı seçerseniz, ifadeleri engellemek için değişkenlerin kapsamını ayarlayabilirsiniz (kapsamı engelleme), bağımsız işlevler (işlev kapsamı) veya JavaScript uygulamasının tamamı (global kapsam).

Kapsam engelleme

let veya const kullanarak bildirdiğiniz tüm değişkenler içeren blok ifadesini içeren Yani değişkene yalnızca bu blok içinden erişilebilir. Şunları deniyoruz: içeren bloğunun dışında blok kapsamlı bir değişkene erişmek aynı duruma neden olur hatasını mevcut olmayan bir değişkene erişmeye çalışırken sorun:

{
    let scopedVariable = true;
    console.log( scopedVariable );
}
> true

scopedVariable
> ReferenceError: scopedVariable is not defined

JavaScript açısından bakıldığında, blok kapsamlı bir değişken mevcut değildir parçasının dışına çıkar. Örneğin, bir sabit değer ve ardından, bu bloğun dışında başka bir sabit değer bildirerek aynı tanımlayıcıya sahip olmalıdır:

{
  const myConstant = false;
}
const myConstant = true;

scopedConstant;
> true

Beyan edilen bir değişken, üst bloğuna kadar genişleyemese de aynı alt öğe blokları için kullanılabilir:

{
    let scopedVariable = true;
    {
    console.log( scopedVariable );
    }
}
> true

Tanımlanan bir değişkenin değeri, bir alt blok içinden değiştirilebilir:

{
    let scopedVariable = false;
    {
    scopedVariable = true;
    }
    console.log( scopedVariable );
}
> true

Yeni bir değişken, bir alt öğe içinde let veya const ile başlatılabilir hatasız bir şekilde engelledikten sonra, bir değişken olarak aynı tanımlayıcıyı üst blok:

{
    let scopedVariable = false;
    {
    let scopedVariable = true;
    }
    console.log( scopedVariable );
}
> false

İşlev Kapsamı

var kullanılarak tanımlanan değişkenler, en yakın kapsayıcı işlevine ayarlanır (veya bir sınıf içindeki statik başlatma bloku).

function myFunction() {
    var scopedVariable = true;

    return scopedVariable;
}

scopedVariable;
> ReferenceError: scopedVariable is not defined

Bu durum, bir işlev çağrıldıktan sonra da devam eder. Her ne kadar değişken, işlev yürütülürken başlatılırsa, bu değişken hâlâ işlevin kapsamı dışında kullanılamaz:

function myFunction() {
    var scopedVariable = true;

    return scopedVariable;
}

scopedVariable;
> ReferenceError: scopedVariable is not defined

myFunction();
> true

scopedVariable;
> ReferenceError: scopedVariable is not defined

Global kapsam

Bir genel değişken, JavaScript uygulamasının tamamında kullanılabilir. içinde, sayfadaki herhangi bir komut dosyasına uygulayabilirsiniz.

Bu istenen bir varsayılan gibi görünse de, projenin herhangi bir parçasının bir uygulamaya erişmesinin ve değişiklik sürecinin, gereksiz ek yük, uygulamanın aynı tanımlayıcıya sahip başka yerlerdeki değişkenlerle çakışmaları. Bu, bir sayfanın oluşturulmasında kullanılan tüm JavaScript'ler için geçerlidir. ve kullanıcı analizleri gibi araçlar dahildir. Dolayısıyla, küresel kapsamı kirletmekten kaçınmaya yönelik en iyi uygulamaları inceleyin.

Üst işlev dışında var kullanılarak ya da let veya Üst yapı bloğunun dışında olan const, global:

var functionGlobal = true; // Global
let blockGlobal = true; // Global

{
    console.log( blockGlobal );
    console.log( functionGlobal );
}
> true
> true

(function() {
    console.log( blockGlobal );
    console.log( functionGlobal );
}());
> true
> true

Açıkça belirtmeden bir değişkene değer atamak (yani hiçbir zaman var, let veya const kullanılmadığında), bir değişkeni bir işlev veya blok içinde başlatılsa bile global kapsam değişikliğine izin verilir. Değişken bazen "ima edilen genel" olarak da adlandırılır.

function myFunction() {
    globalVariable = "global";

    return globalVariable
}

myFunction()\
> "global"

globalVariable\
> "global"

Değişken Kaldırma

Değişkenler ve işlev bildirimleri kapsamlarının en üstüne yer alır, Diğer bir deyişle, JavaScript yorumlayıcısı herhangi bir zamanda bildirilen her türlü değişkeni işaret eder ve onu kapanış satırının ilk satırına etkili bir şekilde taşır kapsamını kontrol edin. Bu, bir değişkenin var öğesine, değişken bildirilmeden önce bir hata:

hoistedVariable
> undefined

var hoistedVariable;

Başlatma işlemi değil, yalnızca değişken bildirimi barındırıldığından var, let veya const ile açıkça bildirilmemiş değişkenler emin olun:

unhoistedVariable;
> Uncaught ReferenceError: unhoistedVariable is not defined

unhoistedVariable = true;

Daha önce belirtildiği gibi, bildirilen ancak başlatılmamış bir değişken undefined değerine atandı. Bu davranış kaldırılmış değişken için geçerlidir yalnızca var kullanılarak beyan edilenler için geçerlidir.

hoistedVariable
> undefined

var hoistedVariable = 2 + 2;

hoistedVariable\
> 4

Bu mantıksız davranış büyük ölçüde, Android'de verilen tasarım kararlarından JavaScript’in en eski sürümlerini içerir ve mevcut siteleri bozar.

let ve const bu sorunu çözmek için bir komut dosyası olduğunda değişkeni oluşturulmadan önce erişilir:

{
    hoistedVariable;

    let hoistedVariable;
}
> Uncaught ReferenceError: can't access lexical declaration 'hoistedVariable' before initialization

Bu hata, "hoistedVariable tanımlanmadı" hatasından farklıdır. sana hata veriyor ve bildirilmemiş bir değişkene erişmeye çalışırken karşılaşabileceğiniz durumlar. JavaScript değişkenin geri çekildiğinde, değişkenin açıklayacağım. Ancak, bu değişkeni undefined değerine ayarlanırsa çevirmen hata verir. let veya const (ya da class) ile tanımlanan değişkenlerin "geçici ölü bölge" ("TDZ"), bitişik bloğun başlangıcından kodda değişkenin bildirildiği noktaya uygulanır.

Zamansal ölü bölge, let davranışının var ile kıyaslandığında daha sezgisel olmasını sağlar. yazar. const tasarımı için de kritik önem taşır. Sabit değerler sabit bir değer en üst kısmına tırmandırılıyordu ve üstü kapalı bir değer taşıyordu. undefined örneği daha sonra anlamlı bir değerle başlatılamadı.

Öğrendiklerinizi sınayın

Bir tanımlayıcıyı ne tür karakterlerle başlatabilirsiniz?

Mektup
Alt çizgi
Bir rakam

Değeri aynı olan bir değişkeni tanımlamak için tercih edilen yöntem hangisidir? değiştirilebilir mi?

izin
const
var