Ortam Kaydı, Identifier'ların belirli değişkenler ve işlevlerle ilişkilendirilmesini, ECMAScript kodunun sözcüksel yuvalanma yapısına dayalı olarak tanımlamak için kullanılan bir belirtim türüdür. Genellikle bir Ortam Kaydı, bir FunctionDeclaration, bir BlockStatement veya bir TryStatement'ın Catch maddesi gibi ECMAScript kodunun bazı belirli sözdizimsel yapılarıyla ilişkilendirilir. Bu tür bir kod her değerlendirildiğinde, o kod tarafından oluşturulan tanımlayıcı bağlamalarını kaydetmek için yeni bir Ortam Kaydı oluşturulur.
Her Ortam Kaydı, null veya bir dış Ortam Kaydı'na başvuru olan bir [[OuterEnv]] alanına sahiptir. Bu, Ortam Kaydı değerlerinin mantıksal yuvalanmasını modellemek için kullanılır. Bir (iç) Ortam Kaydı'nın dış başvurusu, iç Ortam Kaydı'nı mantıksal olarak çevreleyen Ortam Kaydı'na bir başvurudur. Bir dış Ortam Kaydı elbette kendi dış Ortam Kaydı'na sahip olabilir. Bir Ortam Kaydı, birden çok iç Ortam Kaydı için dış ortam olarak hizmet edebilir. Örneğin, bir FunctionDeclaration iç içe iki FunctionDeclaration içeriyorsa, iç içe işlevlerin her birinin Ortam Kayıtları, dış Ortam Kaydı olarak çevreleyen işlevin geçerli değerlendirmesinin Ortam Kaydı'na sahip olacaktır.
Ortam Kayıtları tamamen belirtim mekanizmalarıdır ve bir ECMAScript gerçekleştiriminin herhangi bir belirli yapıtına karşılık gelmek zorunda değildir. Bir ECMAScript programının bu tür değerlere doğrudan erişmesi veya onları işlemesi olanaksızdır.
- Bir *[İşlev Ortam Kaydı](#sec-function-environment-records)*, bir ECMAScript [işlev nesnesinin](07_sec-ecmascript-data-types-and-values.md#function-object) çağrılmasına karşılık gelir ve bu işlev içindeki en üst düzey bildirimler için bağlamaları içerir. Yeni bir `this` bağlaması oluşturabilir. Ayrıca `super` yöntem çağrılarını desteklemek için gerekli durumu yakalar.
- Bir *[Modül Ortam Kaydı](#sec-module-environment-records)*, bir *[Module](17_sec-ecmascript-language-scripts-and-modules.md#prod-Module)*'ün en üst düzey bildirimleri için bağlamaları içerir. Aynı zamanda *[Module](17_sec-ecmascript-language-scripts-and-modules.md#prod-Module)* tarafından açıkça içe aktarılan bağlamaları da içerir. *[[OuterEnv]]*'i bir [Küresel Ortam Kaydı](#sec-global-environment-records)'dır.
Bir Nesne Ortam Kaydı, tanımlayıcı bağlamalarını bir nesnenin özellikleriyle ilişkilendiren WithStatement gibi ECMAScript öğelerinin etkisini tanımlamak için kullanılır.
Bir Küresel Ortam Kaydı, Script küresel bildirimleri için kullanılır. Bir dış ortamı yoktur; [[OuterEnv]]'i null'dır. Tanımlayıcı bağlamalarıyla önceden doldurulabilir ve özellikleri küresel ortamın tanımlayıcı bağlamalarından bazılarını sağlayan ilişkili bir küresel nesne içerir. ECMAScript kodu yürütüldükçe, küresel nesneye ek özellikler eklenebilir ve başlangıç özellikleri değiştirilebilir.
Ortam Kaydı soyut sınıfı, Tablo 14'te tanımlanan soyut belirtim yöntemlerini içerir. Bu soyut yöntemler, somut alt sınıfların her biri için farklı somut algoritmalara sahiptir.
Soyut yöntem HasBinding, name (bir String) argümanını alır ve ya bir Boolean içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir Ortam Kaydı'nın name için bir bağlamaya sahip olup olmadığını belirler.
Soyut yöntem CreateMutableBinding, name (bir String) ve deletable (bir Boolean) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir Ortam Kaydı içinde yeni ancak ilklendirilmemiş bir değişebilir bağlama oluşturur. name, bağlı adın metnidir. deletabletrue ise, bağlama daha sonra silinebilir.
Soyut yöntem CreateImmutableBinding, name (bir String) ve strict (bir Boolean) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir Ortam Kaydı içinde yeni ancak ilklendirilmemiş bir değişmez bağlama oluşturur. name, bağlı adın metnidir. stricttrue ise, ilklendirildikten sonra onu ayarlama girişimleri, o bağlamaya atıfta bulunan işlemlerin katı kip ayarından bağımsız olarak her zaman bir kuraldışı durum fırlatacaktır.
Soyut yöntem InitializeBinding, name (bir String) ve value (bir ECMAScript dil değeri) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir Ortam Kaydı içinde zaten mevcut ancak ilklendirilmemiş bir bağlamanın değerini ayarlar. name, bağlı adın metnidir. value, bağlama için değerdir.
Soyut yöntem SetMutableBinding, name (bir String), value (bir ECMAScript dil değeri) ve strict (bir Boolean) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir Ortam Kaydı içinde zaten mevcut olan değişebilir bir bağlamanın değerini ayarlar. name, bağlı adın metnidir. value, bağlama için değerdir. stricttrue ise ve bağlama ayarlanamazsa, bu bir TypeError kuraldışı durumu fırlatır.
Soyut yöntem GetBindingValue, name (bir String) ve strict (bir Boolean) argümanlarını alır ve ya bir ECMAScript dil değeri içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir Ortam Kaydı'ndan zaten mevcut olan bir bağlamanın değerini döndürür. name, bağlı adın metnidir. strict, katı kip kodunda ortaya çıkan veya aksi takdirde katı kip başvuru anlambilimi gerektiren başvuruları tanımlamak için kullanılır. stricttrue ise ve bağlama mevcut değilse, bu bir ReferenceError kuraldışı durumu fırlatır. Bağlama mevcut ancak ilklendirilmemişse, strict değerine bakılmaksızın bir ReferenceError fırlatılır.
Soyut yöntem DeleteBinding, name (bir String) argümanını alır ve ya bir Boolean içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Bir Ortam Kaydı'ndan bir bağlamayı siler. name, bağlı adın metnidir. name için bir bağlama mevcutsa, bu bağlamayı kaldırır ve true döndürür. Bağlama mevcut ancak kaldırılamıyorsa, false döndürür. Bağlama mevcut değilse, true döndürür.
Soyut yöntem HasThisBinding hiçbir argüman almaz ve bir Boolean döndürür. Bir Ortam Kaydı'nın bir this bağlaması oluşturup oluşturmadığını belirler. Oluşturuyorsa true, oluşturmuyorsa false döndürür.
Soyut yöntem HasSuperBinding hiçbir argüman almaz ve bir Boolean döndürür. Bir Ortam Kaydı'nın bir super yöntem bağlaması oluşturup oluşturmadığını belirler. Oluşturuyorsa true, oluşturmuyorsa false döndürür. true döndürmesi, ters çıkarım geçerli olmasa da, Ortam Kaydı'nın bir İşlev Ortam Kaydı olduğunu ima eder.
Soyut yöntem WithBaseObject hiçbir argüman almaz ve bir Object veya undefined döndürür. Bu Ortam Kaydı bir with deyimi ile ilişkilendirilmişse, with nesnesini döndürür. Aksi takdirde undefined döndürür.
Her Bildirimsel Ortam Kaydı, değişken, sabit, let, sınıf, modül, içe aktarma ve/veya işlev bildirimleri içeren bir ECMAScript program kapsamıyla ilişkilendirilir. Bir Bildirimsel Ortam Kaydı, kapsamı içinde bulunan bildirimlerle tanımlanan tanımlayıcı kümesini bağlar.
Bir Bildirimsel Ortam KaydıenvRecord'un HasBinding somut yöntemi, name (bir String) argümanını alır ve bir Boolean içeren normal tamamlanma döndürür. Argüman tanımlayıcısının, kayıt tarafından bağlanan tanımlayıcılardan biri olup olmadığını belirler. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer envRecord, name için bir bağlamaya sahipse, true döndür.
Bir Bildirimsel Ortam KaydıenvRecord'un CreateMutableBinding somut yöntemi, name (bir String) ve deletable (bir Boolean) argümanlarını alır ve unused içeren normal tamamlanma döndürür. name adı için ilklendirilmemiş yeni bir değişebilir bağlama oluşturur. Bu Ortam Kaydı içinde name için zaten bir bağlama bulunmamalıdır. deletabletrue ise, yeni bağlama silinmeye tabi olarak işaretlenir. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Assert: envRecord, name için zaten bir bağlamaya sahip değildir.
envRecord içinde name için değişebilir bir bağlama oluştur ve ilklendirilmemiş olduğunu kaydet. deletabletrue ise, yeni oluşturulan bağlamanın sonraki bir DeleteBinding çağrısıyla silinebileceğini kaydet.
Bir Bildirimsel Ortam KaydıenvRecord'un CreateImmutableBinding somut yöntemi, name (bir String) ve strict (bir Boolean) argümanlarını alır ve unused içeren normal tamamlanma döndürür. name adı için ilklendirilmemiş yeni bir değişmez bağlama oluşturur. Bu Ortam Kaydı içinde name için zaten bir bağlama bulunmamalıdır. stricttrue ise, yeni bağlama katı bağlama olarak işaretlenir. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Assert: envRecord, name için zaten bir bağlamaya sahip değildir.
envRecord içinde name için değişmez bir bağlama oluştur ve ilklendirilmemiş olduğunu kaydet. stricttrue ise, yeni oluşturulan bağlamanın katı bir bağlama olduğunu kaydet.
Bir Bildirimsel Ortam KaydıenvRecord'un InitializeBinding somut yöntemi, name (bir String) ve value (bir ECMAScript dil değeri) argümanlarını alır ve unused içeren normal tamamlanma döndürür. Adı name olan tanımlayıcının mevcut bağlamasının bağlı değerini value değerine ayarlamak için kullanılır. name için ilklendirilmemiş bir bağlama zaten mevcut olmalıdır. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Assert: envRecord, name için ilklendirilmemiş bir bağlamaya sahip olmalıdır.
envRecord içindeki name için bağlı değeri value olarak ayarla.
envRecord içindeki name bağlamasının ilklendirildiğini kaydet.
Bir Bildirimsel Ortam KaydıenvRecord'un SetMutableBinding somut yöntemi, name (bir String), value (bir ECMAScript dil değeri) ve strict (bir Boolean) argümanlarını alır ve ya unused içeren normal tamamlanma ya da bir fırlatma tamamlanması döndürür. Adı name olan tanımlayıcının mevcut bağlamasının bağlı değerini value değerine değiştirmeye çalışır. name için bir bağlama normalde zaten mevcuttur, ancak nadir durumlarda mevcut olmayabilir. Bağlama değişmez bir bağlamaysa, stricttrue ise bir TypeError fırlatılır. Çağrıldığında aşağıdaki adımları gerçekleştirir:
Eğer envRecord, name için bir bağlamaya sahip değilse, o zaman
Eğer stricttrue ise, bir ReferenceError kuraldışı durumu fırlat.