gpt4 book ai didi

javascript - firefox 组件中的 javascript 函数作用域是什么?

转载 作者:行者123 更新时间:2023-11-29 15:51:21 25 4
gpt4 key购买 nike

我正在使用 javascript 制作一个 firefox 组件。
但是我总是对当前的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>),并通过以下方式将变量注入(inject)到沙箱中:sandbox.external = this; (“this”只是一个组件本身,在 scope2 中)
    在这些步骤之后,我通过 Components.utils.evalInSandbox( <code> , sandbox); 在沙箱中运行一些代码, 和 <code>包含 function sandboxFoo()那个电话external.foo()

    1). sandboxFoo 的全局范围是什么?什么时候运行?我觉得应该是

    2). external.foo 的全局范围是什么?当它被 sandboxFoo 调用时?是<scope1>吗或 <scope2> ?任何文件?

最佳答案

  1. 函数的全局作用域是在定义函数时确定的。对于组件,全局范围与文件中的所有内容共享(大多数情况下,每个文件只有一个组件,因此该组件有效地获得了自己的全局范围)。
  2. 这实际上取决于您想知道什么,以及您的函数是如何调用的。
  3. XPCOM 组件的全局范围将是定义它的文件。如果文件中定义了多个组件(不常见),它们将共享相同的全局范围。
    1. 我认为你的意思是什么是在沙箱内运行代码时的全局范围(你的问题含糊不清,但如果我错了我可以修改)。当您创建沙箱时,它会为沙箱创建一个新的全局范围。
    2. 这有点复杂。当您分配它时,它是对 this 指向的任何内容的引用。假设 this 是您组件的全局范围(它可能不会像写的那样),并且您的意思是您从沙箱内调用 external.foo,全局范围将是您的组件的全局范围。

关于javascript - firefox 组件中的 javascript 函数作用域是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5191081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com