什么';firefox组件中的javascript功能范围是什么?
我正在使用javascript制作firefox组件。什么';firefox组件中的javascript功能范围是什么?,javascript,firefox-addon,xpcom,Javascript,Firefox Addon,Xpcom,我正在使用javascript制作firefox组件。 但我总是对当前javascript函数的全局范围感到困惑,这导致了以下问题 我了解一些关于js函数全局范围的基本概念,但我想知道,函数的全局范围是什么时候确定的?创建(定义)函数的时间,还是调用函数的时间 是否有方法显示(打印一些信息)javascript函数的当前全局范围 以下问题是特定于firefox组件的 对于firefox组件,每个组件本身是否都有一个全局范围?(这意味着组件的每个功能都将在其自身的全局范围内运行),或者每个组件都具
但我总是对当前javascript函数的全局范围感到困惑,这导致了以下问题
以下问题是特定于firefox组件的
如果相同,那是什么
对于这个无聊的例子,我很抱歉,我只是尽可能把它说清楚。
我通过
Components.utils.sandbox()
创建一个沙盒。我在ff组件中定义了一些函数(我称之为
),并通过以下方式向沙盒中注入变量:sandbox.external=this代码>(“这”只是一个组件本身,它位于scope2中)
在这些步骤之后,我通过Components.utils.evalInSandbox(,sandbox)在sandbox中运行一些代码
和
包含调用外部.foo()的函数sandboxFoo()
1) 。运行时,sandboxFoo
的全局范围是什么?我想应该是这样
2) 。当被sandboxFoo
调用时,external.foo
的全局范围是什么?是
还是
?有文件吗
this
是组件的全局范围(它可能不会像编写的那样),并且您的意思是从沙箱中调用external.foo
,那么全局范围将是组件的全局范围你真的是指一个组件还是一个JavaScript模块?我指的是一个用JavaScript编写的XPCOM组件。非常感谢,如果在定义函数时建立了js函数全局范围,我可以理解很多。我指的是不覆盖任何内容的XPCOM组件。那么,问题3呢?嗯,看起来您必须使用wrappedJSObject访问组件中的变量。这表明整个范围是隔离的,因此组件有自己的全局对象。不过我只是猜测,我还没有测试过。组件没有覆盖任何内容,所以您的第三个答案有点奇怪。是否可以引用组件中的全局对象(就像您在浏览器中使用
窗口
的方式)?该宿主对象是否有任何属性?您可以为其添加自己的全局变量,但不能自动定义。除非代码作为对象方法调用,“this”默认情况下将引用全局范围。但是,它是一个组件,因此很可能作为对象方法调用。对于问题4-2,我的意思是“this”指向组件本身,在组件构造函数中赋值,如this.wrappedJSObject=this;所以答案应该是,即使组件中定义的函数在沙盒中调用,该函数的全局范围将在组件本身中,而不是沙盒中,这也证明了js函数的全局范围是在定义时建立的,而不是在调用时建立的。