← ECMAScript 2027 · İçindekiler
ECMA-262 · 18inci Baskı
19

Global Nesne (The Global Object)

Global nesne:

19.1 Global Nesnenin Değer Özellikleri (Value Properties of the Global Object)

19.1.1 globalThis

Bir Realm Kaydı (Realm Record) realm içindeki global nesnenin (global object) "globalThis" özelliğinin başlangıç değeri, realm.[[GlobalEnv]].[[GlobalThisValue]] değeridir.

Bu özellik { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

19.1.2 Infinity

Global nesnenin (global object) "Infinity" özelliğinin başlangıç değeri +∞𝔽'dir (bakınız 6.1.6.1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

19.1.3 NaN

Global nesnenin (global object) "NaN" özelliğinin başlangıç değeri NaN'dır (bakınız 6.1.6.1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

19.1.4 undefined

Global nesnenin (global object) "undefined" özelliğinin başlangıç değeri undefined'dır (bakınız 6.1.1).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

19.2 Global Nesnenin İşlev Özellikleri (Function Properties of the Global Object)

19.2.1 eval ( source )

Bu işlev %eval% içsel (intrinsic) nesnesidir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? PerformEval(source, false, false) değerini döndür.

19.2.1.1 PerformEval ( source, strictCaller, direct )

Soyut işlem PerformEval; source (bir ECMAScript dil değeri (ECMAScript language value)), strictCaller (bir Boole) ve direct (bir Boole) argümanlarını alır ve bir ECMAScript dil değeri (ECMAScript language value) içeren bir normal tamamlanma (normal completion) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Assert: Eğer direct false ise, o halde strictCaller da false olur.

  2. Eğer source bir Dize değilse (is not a String), source değerini döndür.

  3. evalRealm , mevcut Realm Kaydı (current Realm Record) olsun.

  4. NOTE: Bir doğrudan eval (direct eval) durumunda, evalRealm, hem eval'i çağıranın hem de eval işlevinin kendisinin bölgesidir (realm).

  5. ? HostEnsureCanCompileStrings(evalRealm, « », source, direct) işlemini gerçekleştir.

  6. inFunc, false olsun.

  7. inMethod, false olsun.

  8. inDerivedCtor, false olsun.

  9. inClassFieldInitializer, false olsun.

  10. Eğer direct true ise, o halde

    1. thisEnvRecord, GetThisEnvironment() olsun.

    2. Eğer thisEnvRecord bir İşlev Ortam Kaydı (Function Environment Record) ise, o halde

      1. func, thisEnvRecord.[[FunctionObject]] olsun.

      2. inFunc değerini true olarak ayarla.

      3. inMethod değerini thisEnvRecord.HasSuperBinding() olarak ayarla.

      4. Eğer func.[[ConstructorKind]] değeri derived ise, inDerivedCtor değerini true olarak ayarla.

      5. classFieldInitializerName, func.[[ClassFieldInitializerName]] olsun.

      6. Eğer classFieldInitializerName empty değilse, inClassFieldInitializer değerini true olarak ayarla.

  11. Aşağıdaki alt adımları gerçekleştirim tanımlı (implementation-defined) bir sırayla, muhtemelen ayrıştırma ve hata tespitini araya ekleyerek (interleaving) gerçekleştir:

    1. script, ParseText(source, Script) olsun.

    2. Eğer script bir hata Listesi (List) ise, bir SyntaxError istisnası fırlat.

    3. Eğer script'in ScriptBody'yi İçerme (Contains) değeri false ise, undefined döndür.

    4. body, script'in ScriptBody'si olsun.

    5. Eğer inFunc false ise ve body NewTargetİçeriyorsa (Contains), bir SyntaxError istisnası fırlat.

    6. Eğer inMethod false ise ve body SuperProperty'yi İçeriyorsa (Contains), bir SyntaxError istisnası fırlat.

    7. Eğer inDerivedCtor false ise ve body SuperCall'u İçeriyorsa (Contains), bir SyntaxError istisnası fırlat.

    8. Eğer inClassFieldInitializer true ise ve body'nin ContainsArguments değeri true ise, bir SyntaxError istisnası fırlat.

  12. Eğer strictCaller true ise, strictEval, true olsun.

  13. Değilse, strictEval, script'in ScriptIsStrict değeri olsun.

  14. runningContext, yürütülmekte olan yürütme bağlamı (running execution context) olsun.

  15. NOTE: Eğer direct true ise, runningContext, doğrudan eval (direct eval) işlemini gerçekleştiren yürütme bağlamı (execution context) olacaktır. Eğer direct false ise, runningContext, eval işlevinin çağrılmasına ait yürütme bağlamı (execution context) olacaktır.

  16. Eğer direct true ise, o halde

    1. lexicalEnv, NewDeclarativeEnvironment(runningContext's LexicalEnvironment) olsun.

    2. variableEnv, runningContext's VariableEnvironment olsun.

    3. privateEnv, runningContext's PrivateEnvironment olsun.

  17. Değilse,

    1. lexicalEnv, NewDeclarativeEnvironment(evalRealm.[[GlobalEnv]]) olsun.

    2. variableEnv, evalRealm.[[GlobalEnv]] olsun.

    3. privateEnv, null olsun.

  18. Eğer strictEval true ise, variableEnv değerini lexicalEnv olarak ayarla.

  19. Eğer runningContext zaten askıya alınmamışsa, runningContext bağlamını askıya al (suspend).

  20. evalContext, yeni bir ECMAScript kod yürütme bağlamı (ECMAScript code execution context) olsun.

  21. evalContext'in Function alanını null olarak ayarla.

  22. evalContext'in Realm alanını evalRealm olarak ayarla.

  23. evalContext'in ScriptOrModule alanını runningContext'in ScriptOrModule alanı olarak ayarla.

  24. evalContext'in VariableEnvironment alanını variableEnv olarak ayarla.

  25. evalContext'in LexicalEnvironment alanını lexicalEnv olarak ayarla.

  26. evalContext'in PrivateEnvironment alanını privateEnv olarak ayarla.

  27. evalContext bağlamını yürütme bağlamı yığınına (execution context stack) it (push); evalContext artık yürütülmekte olan yürütme bağlamıdır (running execution context).

  28. result, Completion(EvalDeclarationInstantiation(body, variableEnv, lexicalEnv, privateEnv, strictEval)) olsun.

  29. Eğer result bir normal tamamlanma (normal completion) ise, o halde

    1. result değerini Completion(body'nin Evaluation değeri) olarak ayarla.
  30. Eğer result bir normal tamamlanma (normal completion) ise ve result.[[Value]] değeri empty ise, o halde

    1. result değerini NormalCompletion(undefined) olarak ayarla.
  31. evalContext bağlamını askıya al ve onu yürütme bağlamı yığınından (execution context stack) çıkar.

  32. Artık yürütme bağlamı yığınının (execution context stack) en üstünde yer alan bağlamı yürütülmekte olan yürütme bağlamı (running execution context) olarak sürdür (resume).

  33. ? result döndür.

19.2.1.2 HostEnsureCanCompileStrings ( calleeRealm, paramStrings, bodyString, direct )

Barındırıcı tarafından tanımlanmış (host-defined) soyut işlem HostEnsureCanCompileStrings; calleeRealm (bir Realm Kaydı (Realm Record)), paramStrings (Dizelerin bir Listesi (List)), bodyString (bir Dize) ve direct (bir Boole) argümanlarını alır ve ya unused içeren bir normal tamamlanma (normal completion) ya da bir fırlatma tamamlanması (throw completion) döndürür. Barındırıcı ortamların (host environments), geliştiricilerin dizeleri ECMAScript kodu olarak yorumlamasına ve değerlendirmesine izin veren belirli ECMAScript işlevlerini engellemesine olanak tanır.

paramStrings represents the strings that, when using one of the function constructors, will be concatenated together to build the parameters list. bodyString represents the function body or the string passed to an eval call. direct signifies whether the evaluation is a direct eval.

HostEnsureCanCompileStrings soyut işleminin varsayılan gerçekleştirimi NormalCompletion(unused) döndürmektir.

19.2.1.3 EvalDeclarationInstantiation ( body, variableEnv, lexicalEnv, privateEnv, strict )

Soyut işlem EvalDeclarationInstantiation; body (bir ScriptBody Ayrıştırma Düğümü (Parse Node)), variableEnv (bir Ortam Kaydı (Environment Record)), lexicalEnv (bir Bildirimsel Ortam Kaydı (Declarative Environment Record)), privateEnv (bir PrivateEnvironment Kaydı (PrivateEnvironment Record) veya null) ve strict (bir Boole) argümanlarını alır ve unused içeren bir normal tamamlanma (normal completion) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. variableNames, body'nin VarDeclaredNames değeri olsun.

  2. variableDecls, body'nin VarScopedDeclarations değeri olsun.

  3. Eğer strict false ise, o halde

    1. Eğer variableEnv bir Global Ortam Kaydı (Global Environment Record) ise, o halde

      1. variableNames listesinin her bir name öğesi için sırayla şunları yap:

         1. Eğer [HasLexicalDeclaration](10_sec-executable-code-and-execution-contexts.md#sec-haslexicaldeclaration)(*variableEnv*, *name*) değeri `true` ise, bir `SyntaxError` istisnası fırlat.
        
         2. [NOTE](06_sec-notational-conventions.md#note-step): `eval`, bir global sözlüksel bildirim (global lexical declaration) tarafından gölgelenecek (shadowed) bir global var bildirimi oluşturmaz.
    2. thisEnv, lexicalEnv olsun.

    3. Assert: Aşağıdaki döngü sonlanacaktır.

    4. thisEnv ve variableEnv aynı Ortam Kaydı (Environment Record) olmayana kadar tekrarla:

      1. Eğer thisEnv bir Nesne Ortam Kaydı değilse (is not an Object Environment Record), o halde

         1. [NOTE](06_sec-notational-conventions.md#note-step): with deyimlerinin ortamı herhangi bir sözlüksel bildirim içeremez, bu nedenle var/let yükseltme (hoisting) çakışmaları açısından kontrol edilmesine gerek yoktur.
        
         2. *variableNames* listesinin her bir *name* öğesi için sırayla şunları yap:
        
                   1. Eğer ! *thisEnv*.[HasBinding](10_sec-executable-code-and-execution-contexts.md#abstract-hasbinding)(*name*) değeri `true` ise, o halde
        
                               1. [Kuralcı İsteğe Bağlı (Normative Optional)](03_sec-conformance.md#sec-conformance) Eğer [barındırıcı (host)](05_sec-overview.md#host) bir web tarayıcısı ise veya başka bir şekilde [Catch Bloklarındaki VariableStatements](32_sec-additional-ecmascript-features-for-web-browsers.md#sec-variablestatements-in-catch-blocks) özelliğini destekliyorsa, o halde
        
                                             1. Eğer *thisEnv* bir *[Catch](15_sec-ecmascript-language-statements-and-declarations.md#prod-Catch)* tümcesi için olan [Ortam Kaydı (Environment Record)](10_sec-executable-code-and-execution-contexts.md#sec-environment-records) değilse, bir `SyntaxError` istisnası fırlat.
        
                               2. Değilse,
        
                                             1. Bir `SyntaxError` istisnası fırlat.
        
                   2. [NOTE](06_sec-notational-conventions.md#note-step): Bir [doğrudan eval (direct eval)](14_sec-ecmascript-language-expressions.md#sec-function-calls-runtime-semantics-evaluation), var bildirimini benzer isimdeki bir sözlüksel bildirimin üzerine yükseltmeyecektir (hoist).
      2. thisEnv değerini thisEnv.[[OuterEnv]] olarak ayarla.

  4. privateIdentifiers, yeni ve boş bir Liste (List) olsun.

  5. pointer, privateEnv olsun.

  6. pointer değeri null olmayana kadar tekrarla:

    1. pointer.[[Names]] listesinin her bir Private Name binding öğesi için sırayla şunları yap:

      1. Eğer privateIdentifiers listesi binding.[[Description]] değerini içermiyorsa, binding.[[Description]] değerini privateIdentifiers listesine ekle.
    2. pointer değerini pointer.[[OuterPrivateEnvironment]] olarak ayarla.

  7. Argümanı privateIdentifiers olan, body'nin AllPrivateIdentifiersValid değeri false ise, bir SyntaxError istisnası fırlat.

  8. funcsToInitialize, yeni ve boş bir Liste (List) olsun.

  9. declaredFuncNames, yeni ve boş bir Liste (List) olsun.

  10. variableDecls listesinin her bir d öğesi için, ters Liste (List) sırasıyla şunları yap:

    1. Eğer d bir VariableDeclaration, bir ForBinding veya bir BindingIdentifier değilse, o halde

      1. Assert: d bir FunctionDeclaration, bir GeneratorDeclaration, bir AsyncFunctionDeclaration veya bir AsyncGeneratorDeclaration'dır.

      2. NOTE: Aynı isim için birden fazla işlev bildirimi varsa, son bildirim kullanılır.

      3. func, d'nin BoundNames değerinin tek öğesi olsun.

      4. Eğer declaredFuncNames listesi func değerini içermiyorsa, o halde

         1. Eğer *variableEnv* bir [Global Ortam Kaydı (Global Environment Record)](10_sec-executable-code-and-execution-contexts.md#sec-global-environment-records) ise, o halde
           
                   1. Let *funcDefinable* be ? [CanDeclareGlobalFunction](10_sec-executable-code-and-execution-contexts.md#sec-candeclareglobalfunction)(*variableEnv*, *func*).
           
                   2. Eğer *funcDefinable* `false` ise, bir `TypeError` istisnası fırlat.
        
         2. *func* değerini *declaredFuncNames* listesine ekle.
        
         3. *d* öğesini *funcsToInitialize* listesinin ilk öğesi olarak ekle.
  11. declaredVariableNames, yeni ve boş bir Liste (List) olsun.

  12. variableDecls listesinin her bir d öğesi için sırayla şunları yap:

    1. Eğer d bir VariableDeclaration, bir ForBinding veya bir BindingIdentifier ise, o halde

      1. d'nin BoundNames değerinin her bir vn Dizesi için sırayla şunları yap:

         1. Eğer *declaredFuncNames* listesi *vn* değerini içermiyorsa, o halde
           
                   1. Eğer *variableEnv* bir [Global Ortam Kaydı (Global Environment Record)](10_sec-executable-code-and-execution-contexts.md#sec-global-environment-records) ise, o halde
                     
                               1. Let *vnDefinable* be ? [CanDeclareGlobalVar](10_sec-executable-code-and-execution-contexts.md#sec-candeclareglobalvar)(*variableEnv*, *vn*).
                     
                               2. Eğer *vnDefinable* `false` ise, bir `TypeError` istisnası fırlat.
           
                   2. Eğer *declaredVariableNames* listesi *vn* değerini içermiyorsa, o halde
                     
                               1. *vn* değerini *declaredVariableNames* listesine ekle.
  13. Kuralcı İsteğe Bağlı (Normative Optional) Eğer strict false ise ve barındırıcı (host) bir web tarayıcısı ise veya başka bir şekilde Blok Düzeyinde İşlev Bildirimleri Web Eski Uyumluluk Anlambilimi (Block-Level Function Declarations Web Legacy Compatibility Semantics) özelliğini destekliyorsa, o halde

    1. declaredFuncOrVariableNames, declaredFuncNames ve declaredVariableNames listelerinin liste birleşimi (list-concatenation) olsun.

    2. body'nin x'i İçerme (Contains) değeri true olacak şekilde; herhangi bir Block, CaseClause veya DefaultClause x'in StatementList'i içinde doğrudan yer alan her bir FunctionDeclaration f için sırayla şunları yap:

      1. funcName, f'nin BindingIdentifier'inin StringValue değeri olsun.

      2. Eğer FunctionDeclaration f ifadesini, BindingIdentifier olarak funcName'e sahip bir VariableStatement ile değiştirmek body için herhangi bir Erken Hata (Early Error) üretmeyecekse, o halde

         1. *bindingExists*, `false` olsun.
        
         2. *thisEnv* değerini *lexicalEnv* olarak ayarla.
        
         3. [Assert](06_sec-notational-conventions.md#assert): Aşağıdaki döngü sonlanacaktır.
        
         4. *thisEnv* değeri *variableEnv* ile aynı olmayana kadar tekrarla:
           
                   1. Eğer *thisEnv* [bir Nesne Ortam Kaydı değilse (is not an Object Environment Record)](10_sec-executable-code-and-execution-contexts.md#sec-environment-records), o halde
                     
                               1. Eğer ! *thisEnv*.[HasBinding](10_sec-executable-code-and-execution-contexts.md#abstract-hasbinding)(*funcName*) is `true`, then
                                 
                                             1. [Kuralcı İsteğe Bağlı (Normative Optional)](03_sec-conformance.md#sec-conformance) Eğer [barındırıcı (host)](05_sec-overview.md#host) bir web tarayıcısı ise veya başka bir şekilde [Catch Bloklarındaki VariableStatements](32_sec-additional-ecmascript-features-for-web-browsers.md#sec-variablestatements-in-catch-blocks) özelliğini destekliyorsa, o halde
                                               
                                                             1. Eğer *thisEnv* bir *[Catch](15_sec-ecmascript-language-statements-and-declarations.md#prod-Catch)* tümcesi için olan [Ortam Kaydı (Environment Record)](10_sec-executable-code-and-execution-contexts.md#sec-environment-records) değilse, *bindingExists* değerini `true` olarak ayarla.
                                 
                                             2. Else,
                                               
                                                             1. *bindingExists* değerini `true` olarak ayarla.
           
                   2. *thisEnv* değerini *thisEnv*.*[[OuterEnv]]* olarak ayarla.
        
         5. Eğer *bindingExists* `false` ise ve *variableEnv* bir [Global Ortam Kaydı (Global Environment Record)](10_sec-executable-code-and-execution-contexts.md#sec-global-environment-records) ise, o halde
           
                   1. Eğer [HasLexicalDeclaration](10_sec-executable-code-and-execution-contexts.md#sec-haslexicaldeclaration)(*variableEnv*, *funcName*) değeri `false` ise, o halde
                     
                               1. *funcDefinable*, ? [CanDeclareGlobalVar](10_sec-executable-code-and-execution-contexts.md#sec-candeclareglobalvar)(*variableEnv*, *funcName*) olsun.
           
                   2. Değilse,
                     
                               1. *funcDefinable*, `false` olsun.
        
         6. Değilse,
           
                   1. *funcDefinable*, `true` olsun.
        
         7. Eğer *bindingExists* `false` ise ve *funcDefinable* `true` ise, o halde
           
                   1. Eğer *declaredFuncOrVariableNames* listesi *funcName* değerini içermiyorsa, o halde
                     
                               1. Eğer *variableEnv* bir [Global Ortam Kaydı (Global Environment Record)](10_sec-executable-code-and-execution-contexts.md#sec-global-environment-records) ise, o halde
                                 
                                             1. ? [CreateGlobalVarBinding](10_sec-executable-code-and-execution-contexts.md#sec-createglobalvarbinding)(*variableEnv*, *funcName*, `true`) işlemini gerçekleştir.
                     
                               2. Değilse,
                                 
                                             1. *bindingExists* değerini ! *variableEnv*.[HasBinding](10_sec-executable-code-and-execution-contexts.md#abstract-hasbinding)(*funcName*) olarak ayarla.
                                 
                                             2. Eğer *bindingExists* `false` ise, o halde
                                               
                                                             1. ! *variableEnv*.[CreateMutableBinding](10_sec-executable-code-and-execution-contexts.md#abstract-createmutablebinding)(*funcName*, `true`) işlemini gerçekleştir.
                                               
                                                             2. ! *variableEnv*.[InitializeBinding](10_sec-executable-code-and-execution-contexts.md#abstract-initializebinding)(*funcName*, `undefined`) işlemini gerçekleştir.
                     
                               3. *funcName* değerini *declaredFuncOrVariableNames* listesine ekle.
           
                   2. *[FunctionDeclaration](16_sec-ecmascript-language-functions-and-classes.md#prod-FunctionDeclaration)* *f* değerlendirildiğinde, [15.2.6](16_sec-ecmascript-language-functions-and-classes.md#sec-function-definitions-runtime-semantics-evaluation) içinde sunulan *[FunctionDeclaration](16_sec-ecmascript-language-functions-and-classes.md#prod-FunctionDeclaration)* [Evaluation](09_sec-syntax-directed-operations.md#sec-evaluation) algoritması yerine aşağıdaki adımları gerçekleştir:
                     
                               1. *gEnv*, [yürütülmekte olan yürütme bağlamının (running execution context)](10_sec-executable-code-and-execution-contexts.md#running-execution-context) VariableEnvironment'ı olsun.
                     
                               2. *bEnv*, [yürütülmekte olan yürütme bağlamının (running execution context)](10_sec-executable-code-and-execution-contexts.md#running-execution-context) LexicalEnvironment'ı olsun.
                     
                               3. *fObj*, ! *bEnv*.[GetBindingValue](10_sec-executable-code-and-execution-contexts.md#abstract-getbindingvalue)(*funcName*, `false`) olsun.
                     
                               4. ? *gEnv*.[SetMutableBinding](10_sec-executable-code-and-execution-contexts.md#abstract-setmutablebinding)(*funcName*, *fObj*, `false`) işlemini gerçekleştir.
                     
                               5. `unused` döndür.
  14. NOTE: variableEnv bir Global Ortam Kaydı (Global Environment Record) ve global nesne (global object) bir Proxy egzotik nesnesi (Proxy exotic object) olmadığı sürece, bu algoritma adımından sonra hiçbir anormal sonlanma (abnormal termination) gerçekleşmez.

  15. lexicalDecls, body'nin LexicallyScopedDeclarations değeri olsun.

  16. lexicalDecls listesinin her bir d öğesi için sırayla şunları yap:

    1. NOTE: Sözlüksel olarak bildirilen isimler (lexically declared names) burada yalnızca örneklendirilir (instantiated) fakat başlatılmaz (initialized).

    2. d'nin BoundNames değerinin her bir dn öğesi için sırayla şunları yap:

      1. Eğer d'nin IsConstantDeclaration değeri true ise, o halde

         1. ? *lexicalEnv*.[CreateImmutableBinding](10_sec-executable-code-and-execution-contexts.md#abstract-createimmutablebinding)(*dn*, `true`) işlemini gerçekleştir.
      2. Değilse,

         1. ? *lexicalEnv*.[CreateMutableBinding](10_sec-executable-code-and-execution-contexts.md#abstract-createmutablebinding)(*dn*, `false`) işlemini gerçekleştir.
  17. funcsToInitialize listesinin her bir Ayrıştırma Düğümü (Parse Node) f öğesi için sırayla şunları yap:

    1. func, f'nin BoundNames değerinin tek öğesi olsun.

    2. funcObj, argümanları lexicalEnv ve privateEnv olan, f'nin InstantiateFunctionObject değeri olsun.

    3. Eğer variableEnv bir Global Ortam Kaydı (Global Environment Record) ise, o halde

      1. ? CreateGlobalFunctionBinding(variableEnv, func, funcObj, true) işlemini gerçekleştir.
    4. Değilse,

      1. bindingExists, ! variableEnv.HasBinding(func) olsun.

      2. Eğer bindingExists false ise, o halde

         1. [NOTE](06_sec-notational-conventions.md#note-step): Aşağıdaki çağrı, [14](#step-evaldeclarationinstantiation-post-validation). adımdan önceki doğrulamadan dolayı bir [ani tamamlanma (abrupt completion)](07_sec-ecmascript-data-types-and-values.md#sec-completion-record-specification-type) döndüremez.
        
         2. ! *variableEnv*.[CreateMutableBinding](10_sec-executable-code-and-execution-contexts.md#abstract-createmutablebinding)(*func*, `true`) işlemini gerçekleştir.
        
         3. ! *variableEnv*.[InitializeBinding](10_sec-executable-code-and-execution-contexts.md#abstract-initializebinding)(*func*, *funcObj*) işlemini gerçekleştir.
      3. Değilse,

         1. ! *variableEnv*.[SetMutableBinding](10_sec-executable-code-and-execution-contexts.md#abstract-setmutablebinding)(*func*, *funcObj*, `false`) işlemini gerçekleştir.
  18. declaredVariableNames listesinin her bir vn Dizesi için sırayla şunları yap:

    1. Eğer variableEnv bir Global Ortam Kaydı (Global Environment Record) ise, o halde

      1. ? CreateGlobalVarBinding(variableEnv, vn, true) işlemini gerçekleştir.
    2. Değilse,

      1. bindingExists, ! variableEnv.HasBinding(vn) olsun.

      2. Eğer bindingExists false ise, o halde

         1. [NOTE](06_sec-notational-conventions.md#note-step): Aşağıdaki çağrı, [14](#step-evaldeclarationinstantiation-post-validation). adımdan önceki doğrulamadan dolayı bir [ani tamamlanma (abrupt completion)](07_sec-ecmascript-data-types-and-values.md#sec-completion-record-specification-type) döndüremez.
        
         2. ! *variableEnv*.[CreateMutableBinding](10_sec-executable-code-and-execution-contexts.md#abstract-createmutablebinding)(*vn*, `true`) işlemini gerçekleştir.
        
         3. ! *variableEnv*.[InitializeBinding](10_sec-executable-code-and-execution-contexts.md#abstract-initializebinding)(*vn*, `undefined`) işlemini gerçekleştir.
  19. unused döndür.

19.2.2 isFinite ( value )

Bu işlev %isFinite% içsel (intrinsic) nesnesidir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. number, ? ToNumber(value) olsun.

  2. Eğer number sonlu (finite) ise, true döndür.

  3. false döndür.

19.2.3 isNaN ( value )

Bu işlev %isNaN% içsel (intrinsic) nesnesidir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. number, ? ToNumber(value) olsun.

  2. Eğer number NaN ise, true döndür.

  3. false döndür.

19.2.4 parseFloat ( string )

Bu işlev, string argümanının içeriğinin ondalık bir sabit değer (decimal literal) olarak yorumlanmasıyla belirlenen bir Sayı (Number) değeri üretir.

Bu %parseFloat% içsel (intrinsic) nesnesidir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. inputString, ? ToString(string) olsun.

  2. trimmedString, ! TrimString(inputString, start) olsun.

  3. trimmed, StringToCodePoints(trimmedString) olsun.

  4. trimmedPrefix, trimmed listesinin bir StrDecimalLiteral sözdizimini karşılayan en uzun öneki (prefix) olsun; bu önek trimmed nesnesinin kendisi de olabilir. Eğer böyle bir önek yoksa, NaN döndür.

  5. parsedNumber, ParseText(trimmedPrefix, StrDecimalLiteral) olsun.

  6. Assert: parsedNumber bir Ayrıştırma Düğümüdür (Parse Node).

  7. parsedNumber'ın StringNumericValue değerini döndür.

19.2.5 parseInt ( string, radix )

Bu işlev, string içeriğinin belirtilen radix değerine göre yorumlanmasıyla belirlenen bir tamsayı Sayı (integral Number) üretir. string içindeki başlangıç boşlukları göz ardı edilir. Eğer radix değeri 0'a zorlanırsa (örneğin undefined olduğunda), sayı gösterimi "0x" veya "0X" ile başlamadığı sürece 10 olduğu varsayılır, bu durumda 16 olduğu varsayılır. Eğer radix 16 ise, sayı gösterimi isteğe bağlı olarak "0x" veya "0X" ile başlayabilir.

Bu %parseInt% içsel (intrinsic) nesnesidir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. inputString, ? ToString(string) olsun.

  2. trimmedString, ! TrimString(inputString, start) olsun.

  3. sign, 1 olsun.

  4. Eğer trimmedString boş değilse ve trimmedString'in ilk kod birimi 0x002D (HYPHEN-MINUS) kod birimi ise, sign değerini -1 olarak ayarla.

  5. Eğer trimmedString boş değilse ve trimmedString'in ilk kod birimi 0x002B (PLUS SIGN) veya 0x002D (HYPHEN-MINUS) kod birimiyse, trimmedString değerini, trimmedString'in dizin 1'den başlayan altdizesi (substring) olarak ayarla.

  6. radixMV, (? ToInt32(radix)) olsun.

  7. stripPrefix, true olsun.

  8. Eğer radixMV ≠ 0 ise, o halde

    1. Eğer radixMV < 2 veya radixMV > 36 ise, NaN döndür.

    2. Eğer radixMV ≠ 16 ise, stripPrefix değerini false olarak ayarla.

  9. Değilse,

    1. radixMV değerini 10 olarak ayarla.
  10. Eğer stripPrefix true ise, o halde

    1. Eğer trimmedString'in uzunluğu ≥ 2 ise ve trimmedString'in ilk iki kod birimi "0x" veya "0X" ise, o halde

      1. trimmedString değerini, trimmedString'in dizin 2'den başlayan altdizesi (substring) olarak ayarla.

      2. radixMV değerini 16 olarak ayarla.

  11. Eğer trimmedString, taban-radixMV'ye (radix-radixMV) ait olmayan bir basamak (digit) içeren bir kod birimi barındırıyorsa, end, trimmedString içinde bu tür ilk kod biriminin dizini olsun; değilse, end, trimmedString'in uzunluğu olsun.

  12. numberString, trimmedString'in 0'dan end'e kadar olan altdizesi (substring) olsun.

  13. Eğer numberString boş ise, NaN döndür.

  14. mathInt, basamak değerleri 10 ila 35 olan haneler için A ila Z ve a ila z harfleri kullanılarak, taban-radixMV gösteriminde numberString tarafından temsil edilen tamsayı (integer) değeri olsun. (Ancak, eğer radixMV = 10 ise ve numberString 20'den fazla anlamlı basamak içeriyorsa, gerçekleştirimin tercihine bağlı olarak 20. basamaktan sonraki her anlamlı basamak 0 basamağı ile değiştirilebilir; ve eğer radixMV değeri 2, 4, 8, 10, 16 veya 32 değerlerinden biri değilse, o halde mathInt, taban-radixMV gösteriminde numberString ile belirtilen tamsayı (integer) değerini temsil eden gerçekleştirim yaklaşımlı (implementation-approximated) bir tamsayı (integer) olabilir.)

  15. Eğer mathInt = 0 ise, o halde

    1. Eğer sign = -1, return -0𝔽.

    2. Return +0𝔽.

  16. Return 𝔽(sign × mathInt).

19.2.6 URI İşleme İşlevleri (URI Handling Functions)

Tekdüze Kaynak Tanımlayıcıları (Uniform Resource Identifiers) veya URI'ler, İnternet üzerindeki kaynakları (örneğin web sayfaları veya dosyalar) ve bunlara erişim sağlayan aktarım protokollerini (örneğin HTTP veya FTP) tanımlayan Dizelerdir. ECMAScript dilinin kendisi, bu bölümde açıklanan URI kodlama (encoding) ve kod çözme (decoding) işlevleri dışında, URI'lerin kullanımına yönelik herhangi bir destek sunmaz. encodeURI ve decodeURI, tam URI'lerle çalışmak üzere tasarlanmıştır; tüm ayrılmış karakterlerin özel bir anlama (örneğin sınırlandırıcı olarak) sahip olduğunu varsayar ve bu yüzden bunları kodlamaz (encode). encodeURIComponent ve decodeURIComponent, bir URI'nin bağımsız bileşenleriyle çalışmak üzere tasarlanmıştır; tüm ayrılmış karakterlerin metni temsil ettiğini ve bileşen tam bir URI'nin parçası olduğunda özel bir anlam kazanmasını önlemek için kodlanması gerektiğini varsayar.

19.2.6.1 decodeURI ( encodedURI )

Bu işlev, bir URI'nin yeni bir sürümünü hesaplar; bu sürümde, encodeURI işlevi tarafından getirilebilecek türdeki her bir kaçış dizisi (escape sequence) ve UTF-8 kodlaması, temsil ettiği kod noktasının (code point) UTF-16 kodlamasıyla değiştirilir. encodeURI tarafından getirilmiş olamayacak kaçış dizileri değiştirilmez.

Bu %decodeURI% içsel (intrinsic) nesnesidir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. uriString, ? ToString(encodedURI) olsun.

  2. preserveEscapeSet, ";/?:@&=+$,#" olsun.

  3. ? Decode(uriString, preserveEscapeSet) değerini döndür.

19.2.6.2 decodeURIComponent ( encodedURIComponent )

Bu işlev, bir URI'nin yeni bir sürümünü hesaplar; bu sürümde, encodeURIComponent işlevi tarafından getirilebilecek türdeki her bir kaçış dizisi (escape sequence) ve UTF-8 kodlaması, temsil ettiği kod noktasının (code point) UTF-16 kodlamasıyla değiştirilir.

Bu %decodeURIComponent% içsel (intrinsic) nesnesidir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. componentString, ? ToString(encodedURIComponent) olsun.

  2. preserveEscapeSet, boş Dize olsun.

  3. ? Decode(componentString, preserveEscapeSet) değerini döndür.

19.2.6.3 encodeURI ( uri )

Bu işlev, UTF-16 ile kodlanmış (6.1.4) bir URI'nin yeni bir sürümünü hesaplar; bu sürümde belirli kod noktalarının her bir örneği, kod noktasının UTF-8 kodlamasını temsil eden bir, iki, üç veya dört kaçış dizisi ile değiştirilir.

Bu %encodeURI% intrinsic nesnesidir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. uriString, ? ToString(uri) olsun.

  2. extraUnescaped, ";/?:@&=+$,#" olsun.

  3. ? Encode(uriString, extraUnescaped) değerini döndür.

19.2.6.4 encodeURIComponent ( uriComponent )

Bu işlev, UTF-16 ile kodlanmış (6.1.4) bir URI bileşeninin yeni bir sürümünü hesaplar; bu sürümde belirli kod noktalarının her bir örneği, kod noktasının UTF-8 kodlamasını temsil eden bir, iki, üç veya dört kaçış dizisi ile değiştirilir.

Bu %encodeURIComponent% intrinsic nesnesidir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. componentString, ? ToString(uriComponent) olsun.

  2. extraUnescaped, boş Dize olsun.

  3. ? Encode(componentString, extraUnescaped) değerini döndür.

19.2.6.5 Encode ( string, extraUnescaped )

Soyut işlem Encode; string (bir Dize) ve extraUnescaped (bir Dize) argümanlarını alır ve bir Dize içeren bir normal tamamlanma (normal completion) ya da bir fırlatma tamamlanması (throw completion) döndürür. string ifadesini 6.1.4 içinde açıklandığı gibi UTF-16 ile kodlanmış kod noktaları dizisi olarak yorumlayarak URI kodlaması ve kaçışı gerçekleştirir. Eğer bir karakter RFC 2396'da ayrılmamış (unreserved) olarak tanımlanmışsa veya extraUnescaped içinde yer alıyorsa, kaçış işlemine tabi tutulmaz. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. length, string'in uzunluğu olsun.

  2. result, boş Dize olsun.

  3. alwaysUnescaped, ASCII kelime karakterleri (ASCII word characters) ile "-.!~*'()" dizelerinin dize birleşimi (string-concatenation) olsun.

  4. unescapedSet, alwaysUnescaped ve extraUnescaped dizelerinin dize birleşimi (string-concatenation) olsun.

  5. k, 0 olsun.

  6. k < length olduğu sürece tekrarla:

    1. codeUnit, string içindeki dizin k'de yer alan kod birimi olsun.

    2. Eğer unescapedSet codeUnit değerini içeriyorsa, o halde

      1. k değerini k + 1.

      2. result değerini, result ve codeUnit değerlerinin dize birleşimi (string-concatenation) olarak ayarla.

    3. Değilse,

      1. codePoint, CodePointAt(string, k) olsun.

      2. Eğer codePoint.[[IsUnpairedSurrogate]] değeri true ise, bir URIError istisnası fırlat.

      3. k değerini k + codePoint.[[CodeUnitCount]] olarak ayarla.

      4. octets, codePoint.[[CodePoint]] değerine UTF-8 dönüşümü uygulanarak elde edilen sekizlilerin (octets) bir Listesi (List) olsun.

      5. octets listesinin her bir octet öğesi için sırayla şunları yap:

         1. *hex*, *octet* değerinin büyük harfli onaltılık sayı biçiminde biçimlendirilmiş Dize temsili olsun.
        
         2. *result* değerini, *result*, `"%"`, ve [StringPad](23_sec-text-processing.md#sec-stringpad)(*hex*, 2, `"0"`, `start`) değerlerinin [dize birleşimi (string-concatenation)](07_sec-ecmascript-data-types-and-values.md#string-concatenation) olarak ayarla.
  7. Return result.

19.2.6.6 Decode ( string, preserveEscapeSet )

Soyut işlem Decode; string (bir Dize) ve preserveEscapeSet (bir Dize) argümanlarını alır ve bir Dize içeren bir normal tamamlanma (normal completion) ya da bir fırlatma tamamlanması (throw completion) döndürür. preserveEscapeSet içindeki Temel Latince (Basic Latin) karakterlere karşılık gelen tüm kaçış dizilerini koruyarak URI kaçış çözme (unescaping) ve kod çözme (decoding) işlemlerini gerçekleştirir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. length, string'in uzunluğu olsun.

  2. result, boş Dize olsun.

  3. k, 0 olsun.

  4. k < length olduğu sürece tekrarla:

    1. codeUnit, string içindeki dizin k'de yer alan kod birimi olsun.

    2. segment, codeUnit olsun.

    3. Eğer codeUnit, 0x0025 (PERCENT SIGN) kod birimi ise, o halde

      1. Eğer k + 3 > length ise, bir URIError istisnası fırlat.

      2. escape, string'in k'den k + 3'e kadar olan altdizesi (substring) olsun.

      3. firstOctet, ParseHexOctet(string, k + 1) olsun.

      4. Eğer firstOctet bir tamsayı (integer) değilse, bir URIError istisnası fırlat.

      5. k değerini k + 2 olarak ayarla.

      6. n, firstOctet içindeki öncü 1 bitlerinin sayısı olsun.

      7. Eğer n = 0 ise, o halde

         1. *asciiChar*, sayısal değeri *firstOctet* olan kod birimi olsun.
        
         2. Eğer *preserveEscapeSet* *asciiChar* değerini içeriyorsa, *segment* değerini *escape* olarak ayarla; değilse, *segment* değerini *asciiChar* olarak ayarla.
      8. Değilse,

         1. Eğer *n* = 1 veya *n* > 4 ise, bir `URIError` istisnası fırlat.
        
         2. *octets*, « *firstOctet* » olsun.
        
         3. *j*, 1 olsun.
        
         4. *j* < *n* olduğu sürece tekrarla:
           
                   1. *k* değerini *k* + 1 olarak ayarla.
           
                   2. Eğer *k* + 3 > *length* ise, bir `URIError` istisnası fırlat.
           
                   3. Eğer *string* içindeki dizin *k*'de yer alan kod birimi 0x0025 (PERCENT SIGN) kod birimi değilse, bir `URIError` istisnası fırlat.
           
                   4. *continuationByte*, [ParseHexOctet](#sec-parsehexoctet)(*string*, *k* + 1) olsun.
           
                   5. Eğer *continuationByte* bir [tamsayı (integer)](06_sec-notational-conventions.md#integer) değilse, bir `URIError` istisnası fırlat.
           
                   6. *continuationByte* değerini *octets* listesine ekle.
           
                   7. *k* değerini *k* + 2 olarak ayarla.
           
                   8. *j* değerini *j* + 1 olarak ayarla.
        
         5. [Assert](06_sec-notational-conventions.md#assert): *octets* listesinin uzunluğu *n*'dir.
        
         6. Eğer *octets*, geçerli bir Unicode kod noktasının UTF-8 kodlamasını içermiyorsa, bir `URIError` istisnası fırlat.
        
         7. *codePoint*, *octets* listesine UTF-8 dönüşümü uygulanarak elde edilen kod noktası olsun, yani bir sekizliler [Listesinden (List)](07_sec-ecmascript-data-types-and-values.md#sec-list-and-record-specification-type) 21 bitlik bir değere dönüşsün.
        
         8. *segment* değerini [UTF16EncodeCodePoint](12_sec-ecmascript-language-source-code.md#sec-utf16encodecodepoint)(*codePoint*) olarak ayarla.
    4. result değerini, result ve segment değerlerinin dize birleşimi (string-concatenation) olarak ayarla.

    5. k değerini k + 1 olarak ayarla.

  5. Return result.

19.2.6.7 ParseHexOctet ( string, position )

Soyut işlem ParseHexOctet; string (bir Dize) ve position (negatif olmayan bir tamsayı (integer)) argümanlarını alır ve negatif olmayan bir tamsayı (integer) ya da boş olmayan bir SyntaxError nesneleri Listesi (List) döndürür. string içinde belirtilen position konumundaki iki onaltılık karakterden oluşan diziyi işaretsiz 8 bitlik bir tamsayıya (integer) ayrıştırır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. length, string'in uzunluğu olsun.

  2. Assert: position + 2 ≤ length.

  3. hexDigits, string'in position'dan position + 2'ye kadar olan altdizesi (substring) olsun.

  4. parseResult, ParseText(hexDigits, HexDigits[~Sep]) olsun.

  5. Eğer parseResult bir Ayrıştırma Düğümü (Parse Node) değilse, parseResult değerini döndür.

  6. n, parseResult'ın MV değeri olsun.

  7. Assert: n, 0'dan 255'e kadar olan kapsayıcı aralıkta (inclusive interval) yer alır.

  8. n değerini döndür.

19.3 Global Nesnenin Yapıcı Özellikleri (Constructor Properties of the Global Object)

19.3.1 AggregateError ( . . . )

Bakınız 20.5.7.1.

19.3.2 Array ( . . . )

Bakınız 23.1.1.

19.3.3 ArrayBuffer ( . . . )

Bakınız 25.1.4.

19.3.4 BigInt ( . . . )

Bakınız 21.2.1.

19.3.5 BigInt64Array ( . . . )

Bakınız 23.2.5.

19.3.6 BigUint64Array ( . . . )

Bakınız 23.2.5.

19.3.7 Boolean ( . . . )

Bakınız 20.3.1.

19.3.8 DataView ( . . . )

Bakınız 25.3.2.

19.3.9 Date ( . . . )

Bakınız 21.4.2.

19.3.10 Error ( . . . )

Bakınız 20.5.1.

19.3.11 EvalError ( . . . )

Bakınız 20.5.5.1.

19.3.12 FinalizationRegistry ( . . . )

Bakınız 26.2.1.

19.3.13 Float16Array ( . . . )

Bakınız 23.2.5.

19.3.14 Float32Array ( . . . )

Bakınız 23.2.5.

19.3.15 Float64Array ( . . . )

Bakınız 23.2.5.

19.3.16 Function ( . . . )

Bakınız 20.2.1.

19.3.17 Int8Array ( . . . )

Bakınız 23.2.5.

19.3.18 Int16Array ( . . . )

Bakınız 23.2.5.

19.3.19 Int32Array ( . . . )

Bakınız 23.2.5.

19.3.20 Iterator ( . . . )

Bakınız 27.1.3.1.

19.3.21 Map ( . . . )

Bakınız 24.1.1.

19.3.22 Number ( . . . )

Bakınız 21.1.1.

19.3.23 Object ( . . . )

Bakınız 20.1.1.

19.3.24 Promise ( . . . )

Bakınız 27.2.3.

19.3.25 Proxy ( . . . )

Bakınız 28.2.1.

19.3.26 RangeError ( . . . )

Bakınız 20.5.5.2.

19.3.27 ReferenceError ( . . . )

Bakınız 20.5.5.3.

19.3.28 RegExp ( . . . )

Bakınız 22.2.4.

19.3.29 Set ( . . . )

Bakınız 24.2.2.

19.3.30 SharedArrayBuffer ( . . . )

Bakınız 25.2.3.

19.3.31 String ( . . . )

Bakınız 22.1.1.

19.3.32 Symbol ( . . . )

Bakınız 20.4.1.

19.3.33 SyntaxError ( . . . )

Bakınız 20.5.5.4.

19.3.34 TypeError ( . . . )

Bakınız 20.5.5.5.

19.3.35 Uint8Array ( . . . )

Bakınız 23.2.5.

19.3.36 Uint8ClampedArray ( . . . )

Bakınız 23.2.5.

19.3.37 Uint16Array ( . . . )

Bakınız 23.2.5.

19.3.38 Uint32Array ( . . . )

Bakınız 23.2.5.

19.3.39 URIError ( . . . )

Bakınız 20.5.5.6.

19.3.40 WeakMap ( . . . )

Bakınız 24.3.1.

19.3.41 WeakRef ( . . . )

Bakınız 26.1.1.

19.3.42 WeakSet ( . . . )

Bakınız 24.4.

19.4 Global Nesnenin Diğer Özellikleri (Other Properties of the Global Object)

19.4.1 Atomics

Bakınız 25.4.

19.4.2 JSON

Bakınız 25.5.

19.4.3 Math

Bakınız 21.3.

19.4.4 Reflect

Bakınız 28.1.