Apart from the technical answers above, below answer serves as a simple mental model to fit the purpose of Script scope. Mental Model : We might want to declare some global variables but don't want to assign those variables to the global object ( reason : unnecessary polluting attributes of an global object ), in that case we use let/const(at top level). And to make sure above works, we need a way to show that these variables are global but not attached to the global object. Thus they have added a Script scope [ following the terminology from Chrome Dev tools ]