greasemonkey沙箱和范围问题

时间:2011-03-11 01:28:28

标签: javascript scope global-variables greasemonkey

我正在创建一个GM脚本,并且对如何使用尽可能少的全局污染进行设置提出了疑问。

我有1个主要功能可用,主要功能内有一堆私有功能。像这样:

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)

我能想到的两者之间的唯一区别是,它是否会在运行任何代码之前进行解析,因此我可以使用我的私有函数编写代码。是否有任何名称冲突的可能性?

2 个答案:

答案 0 :(得分:3)

  

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

你拥有它的方式function f1(){},因为那时函数的名称f1对于调试代码很有用。

  

我也应该使用函数main(a,b,c)或var main = function(a,b,c)

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

也许你想要这样的东西:

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

答案 1 :(得分: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);
};