Global Nesne (The Global Object)
Global nesne:
kontrol herhangi bir yürütme bağlamına (execution context) girmeden önce oluşturulur.
bir [[Construct]] dahili yöntemine (internal method) sahip değildir;
newişleci (operator) ile bir yapıcı (constructor) olarak kullanılamaz.bir [[Call]] dahili yöntemine (internal method) sahip değildir; bir işlev olarak çağrılamaz.
değeri barındırıcı tarafından tanımlanmış (host-defined) olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.
bu şartnamede tanımlanan özelliklerin yanı sıra barındırıcı tarafından tanımlanmış (host-defined) ek özelliklere sahip olabilir. Bu, değeri global nesnenin kendisi olan bir özelliği de içerebilir.
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:
- ? 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:
Assert: Eğer direct
falseise, o halde strictCaller dafalseolur.Eğer source bir Dize değilse (is not a String), source değerini döndür.
evalRealm , mevcut Realm Kaydı (current Realm Record) olsun.
NOTE: Bir doğrudan eval (direct eval) durumunda, evalRealm, hem
eval'i çağıranın hem deevalişlevinin kendisinin bölgesidir (realm).? HostEnsureCanCompileStrings(evalRealm, « », source, direct) işlemini gerçekleştir.
inFunc,
falseolsun.inMethod,
falseolsun.inDerivedCtor,
falseolsun.inClassFieldInitializer,
falseolsun.Eğer direct
trueise, o haldethisEnvRecord, GetThisEnvironment() olsun.
Eğer thisEnvRecord bir İşlev Ortam Kaydı (Function Environment Record) ise, o halde
func, thisEnvRecord.[[FunctionObject]] olsun.
inFunc değerini
trueolarak ayarla.inMethod değerini thisEnvRecord.HasSuperBinding() olarak ayarla.
Eğer func.[[ConstructorKind]] değeri
derivedise, inDerivedCtor değerinitrueolarak ayarla.classFieldInitializerName, func.[[ClassFieldInitializerName]] olsun.
Eğer classFieldInitializerName
emptydeğilse, inClassFieldInitializer değerinitrueolarak ayarla.
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:
Eğer script bir hata Listesi (List) ise, bir
SyntaxErroristisnası fırlat.Eğer script'in ScriptBody'yi İçerme (Contains) değeri
falseise,undefineddöndür.body, script'in ScriptBody'si olsun.
Eğer inFunc
falseise ve body NewTarget'ı İçeriyorsa (Contains), birSyntaxErroristisnası fırlat.Eğer inMethod
falseise ve body SuperProperty'yi İçeriyorsa (Contains), birSyntaxErroristisnası fırlat.Eğer inDerivedCtor
falseise ve body SuperCall'u İçeriyorsa (Contains), birSyntaxErroristisnası fırlat.Eğer inClassFieldInitializer
trueise ve body'nin ContainsArguments değeritrueise, birSyntaxErroristisnası fırlat.
Eğer strictCaller
trueise, strictEval,trueolsun.Değilse, strictEval, script'in ScriptIsStrict değeri olsun.
runningContext, yürütülmekte olan yürütme bağlamı (running execution context) olsun.
NOTE: Eğer direct
trueise, runningContext, doğrudan eval (direct eval) işlemini gerçekleştiren yürütme bağlamı (execution context) olacaktır. Eğer directfalseise, runningContext,evalişlevinin çağrılmasına ait yürütme bağlamı (execution context) olacaktır.Eğer direct
trueise, o haldelexicalEnv, NewDeclarativeEnvironment(runningContext's LexicalEnvironment) olsun.
variableEnv, runningContext's VariableEnvironment olsun.
privateEnv, runningContext's PrivateEnvironment olsun.
Değilse,
lexicalEnv, NewDeclarativeEnvironment(evalRealm.[[GlobalEnv]]) olsun.
variableEnv, evalRealm.[[GlobalEnv]] olsun.
privateEnv,
nullolsun.
Eğer strictEval
trueise, variableEnv değerini lexicalEnv olarak ayarla.Eğer runningContext zaten askıya alınmamışsa, runningContext bağlamını askıya al (suspend).
evalContext, yeni bir ECMAScript kod yürütme bağlamı (ECMAScript code execution context) olsun.
evalContext'in Function alanını
nullolarak ayarla.evalContext'in Realm alanını evalRealm olarak ayarla.
evalContext'in ScriptOrModule alanını runningContext'in ScriptOrModule alanı olarak ayarla.
evalContext'in VariableEnvironment alanını variableEnv olarak ayarla.
evalContext'in LexicalEnvironment alanını lexicalEnv olarak ayarla.
evalContext'in PrivateEnvironment alanını privateEnv olarak ayarla.
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).
result, Completion(EvalDeclarationInstantiation(body, variableEnv, lexicalEnv, privateEnv, strictEval)) olsun.
Eğer result bir normal tamamlanma (normal completion) ise, o halde
- result değerini Completion(body'nin Evaluation değeri) olarak ayarla.
Eğer result bir normal tamamlanma (normal completion) ise ve result.[[Value]] değeri
emptyise, o halde- result değerini NormalCompletion(
undefined) olarak ayarla.
- result değerini NormalCompletion(
evalContext bağlamını askıya al ve onu yürütme bağlamı yığınından (execution context stack) çıkar.
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).
? result döndür.