Почему «имя» является определенной переменной по умолчанию в JavaScript?

Я случайно столкнулся с этим, когда демонстрировал область видимости переменных в этой реплике. Возьмите этот код, например:

var myFunc = function() {
    var name = 'Matt';
    var functionScopedVariable = "I'm in the function"
    console.log(name); // => 'Matt'
    console.log(functionScopedVariable); // => "I'm in the function"
}

myFunc();
console.log(name) // => ''
console.log(typeof name) // => string
console.log(functionScopedVariable) // => ReferenceError: functionScopedVariable is not defined

Я подумал, что это может быть какое-то странное пространство имен с repl, однако перейдите на любой веб-сайт, откройте консоль и введите name, и он выведет "" вместо ReferenceError: name is not defined. Что здесь происходит? Ничего не ломает, просто супер любопытно. Я немного погуглил, но ничего не нашел по этой теме.


person Matthew    schedule 08.03.2018    source источник
comment
потому что глобальный объект window имеет свойство name - это не стандартное значение javascript как таковое (например, nodejs не имеет глобального свойства name), это связано с HTML/DOM - например, у вас также есть такие вещи, как Image как глобальный, ничего общего с языком javascript, хотя   -  person Jaromanda X    schedule 08.03.2018
comment
И это относится к браузерам, а не к Javascript. Понятно.   -  person Matthew    schedule 08.03.2018