Область применения свойств и методов объекта - PullRequest
2 голосов
/ 01 июля 2011

В статье Покажите любовь к объектному литералу , сказано:
Когда у нас есть несколько скриптов на странице, глобальные переменные и функции будут перезаписаны, если их имя повторяется.

Одним из решений является создание переменных как свойства и функции как методы объекта и получить к ним доступ через имя объекта.

Но предотвратит ли это попадание переменных в глобальное пространство имен?

<script>
    var movie = {
        name: "a",
        trailer: function(){
           //code
        }
    };
</script>

В приведенном выше коде, какие элементы добавляются в глобальное пространство имен?
а) Просто название объекта - movie
б) Имя объекта, а также свойства и методы внутри него - movie, movie.name, movie.trailer()

1 Ответ

3 голосов
/ 01 июля 2011

movie будет существовать в глобальном пространстве имен (в браузере: window). В пределах movie -области существуют: name и trailer. Вы можете увидеть это, если попытаетесь выполнить trailer из глобального объекта (window.trailer() приведет к ReferenceError: trailer is not defined). trailer может быть выполнено только с использованием movie.trailer() (или window.movie.trailer()).

Javascript имеет лексический охват, он же статический охват, что означает:

  • идентификатор в определенном месте в программе всегда ссылается на одно и то же место переменной - где «всегда» означает «каждый раз, когда выполняется содержащее выражение», и что

  • местоположение переменной, к которой она относится, может быть определено статическим анализом контекста исходного кода, в котором появляется этот идентификатор, без необходимости учитывать ход выполнения программы в целом 1 .

1 Источник

...