Какова область действия функции JavaScript в компонентах Firefox? - PullRequest
3 голосов
/ 04 марта 2011

Я делаю компонент Firefox, используя JavaScript.
Но меня всегда смущает, какова глобальная область действия текущей функции JavaScript, что приводит к следующим вопросам?

  1. Я понимаю некоторую базовую концепцию о глобальной области действия функции js в обычном случае, но я хочу знать, когда определяется глобальная область действия функции? Время, когда функция создается (определяется), или время, когда функция вызывается?

  2. Есть ли способ показать (напечатать некоторую информацию) текущую глобальную область действия функции javascript?

    following question is firefox component specific

  3. Для компонента Firefox каждый компонент имеет глобальную область видимости? (что означает, что каждая функция компонента будет выполняться сама по себе в глобальной области видимости), или все компоненты имеют одинаковую глобальную область видимости?
    Если то же самое, что это?

  4. Например, в таком случае
    sorry for this boring example, i just make it as clear as possible.
    Я делаю песочницу через Components.utils.Sandbox(<scope1>). Я определяю некоторую функцию в компоненте ff (я назвал <scope2>) и вставляю переменную в песочницу с помощью: sandbox.external = this; («this» - это просто сам компонент, который находится в scope2)
    После этого шага я запускаю некоторый код в песочнице Components.utils.evalInSandbox( <code> , sandbox);, а <code> содержит function sandboxFoo(), который вызывает external.foo()

    1). какова глобальная область действия sandboxFoo, когда он работает? Я думаю, что это должно быть

    2). какова глобальная область действия external.foo, когда она вызывается sandboxFoo? Это <scope1> или <scope2>? Любая документация?

Ответы [ 2 ]

1 голос
/ 04 марта 2011
  1. Глобальная область действия функции определяется при ее определении.В случае компонентов глобальная область видимости используется совместно со всем в файле (большую часть времени у вас будет только один компонент на файл, чтобы компонент эффективно получал свою собственную глобальную область видимости).
  2. Этодействительно зависит от того, что вы хотите знать, и от того, как была вызвана ваша функция.
  3. Глобальной областью действия компонента XPCOM будет файл, в котором он определен. Если вфайл (необычный), они будут использовать одну и ту же глобальную область.
    1. Я думаю, вы имеете в виду, что такое глобальная область действия при запуске кода внутри песочницы (ваш вопрос неопределенный, но я могу пересмотретьэто если я не прав).Когда вы создаете песочницу, она создает новую глобальную область действия для песочницы.
    2. Это немного сложнее.Это ссылка на то, на что указывает this при назначении.Предполагая, что this является глобальной областью действия вашего компонента (вероятно, она не будет такой, как написано), и что вы имеете в виду, что вы вызываете external.foo из песочницы, глобальная область будет глобальной областью действия ваших компонентов.
0 голосов
/ 04 марта 2011
  1. Область действия устанавливается при определении функции.
  2. Извините, ничего не знаю.
  3. Объем зависит от того, что вы накладываете. Если два компонента перекрывают один и тот же элемент, они имеют одинаковую область видимости.
  4. Глобальная область действия будет той, в которой она была определена.
...