2011-03-11 42 views
1

我正在创建一个GM脚本,并对如何设置它尽可能少的全球污染问题。greasemonkey沙盒和范围问题

我有一个主要的功能,它是可用的和一堆私人功能在主要的一个。像这样的东西:

function main(a, b, c) { 
    /* CODE */ 
    f1(a); 
    /* CODE */ 
    f2(a + c); 
    ... 
    function f1(a) { 
     /* CODE */ 
    } 
    function f2(a) { 
     /* CODE */ 
    } 
} 

我想知道我应该使用var f1 = function(a) {...}还是我拥有它的方式?

我也应该用function main(a, b, c)var main = function(a, b, c)

两个,我能想到的是,如果将运行任何代码,所以我可以用我的私有函数写我的代码的出路之前被解析的唯一区别。有没有任何名称冲突的机会?

+0

在Greasemonkey的,每个脚本都有自己的沙盒(自己的全球范围内)。访问/污染主页的全局作用域的唯一方法是访问'unsafeWindow'。 – Thai 2011-03-11 02:08:03

+0

@Thai是的,但我也计划在其他脚本中使用它 – qwertymk 2011-03-11 02:25:19

回答

3

我不知道我应该还是用VAR F1 =函数(){...}或我有它的方式吗?

你拥有它,function f1(){}的方式,因为这样的功能将有一个名字f1这对于调试代码有用。

我也应该用函数main(A,B,C)或VAR主要=功能(A,B,C)

如果你打算让其他的脚本,你应该使用的名称main使用你的脚本。由于我上面给出的原因,前一种方法更好。

也许你想是这样的:

(function(){ 
    function f1() {} ; 
    function f2() {}; 
})() 
1

这两种方式之间应该没有关系。任何名称冲突都有可能出现。如果你做var f1 = function(a) {},你需要在你的主函数的顶部定义那些函数,然后再尝试调用它们。

var main = function(a, b, c) { 
    var f1 = function(a) { 
     /* CODE */ 
    }; 
    var f2 = function(a) { 
     /* CODE */ 
    }; 
    /* CODE */ 
    f1(a); 
    /* CODE */ 
    f2(a + c); 
};