代码之家  ›  专栏  ›  技术社区  ›  anjanesh

使函数在闭包全局中声明而不使用窗口

  •  0
  • anjanesh  · 技术社区  · 15 年前

    如何使在闭包中声明的函数成为全局函数?这是一个谷歌应用程序脚本,因此没有 窗口 .

    有关于如何在Google应用程序脚本中使用闭包的文档,但是这个示例声明了一个对象而不是一个函数。 http://code.google.com/googleapps/appsscript/articles/appengine.html
    var json=json

    // foo = function(){}
    (function ()
    {
        ...
    
        foo = function (a, b)
        {
            ...
        }
    
        foo.prototype =
        {
            ...
        }
    
        // window.foo = foo; // Not Possible
    }());
    
    1 回复  |  直到 15 年前
        1
  •  0
  •   Miguel Silva    15 年前

    这应该有效:

    var globalFoo;
    
    (function ()
    {
        ...
    
        foo = function (a, b)
        {
            ...
        }
    
        foo.prototype =
        {
            ...
        }
    
        globalFoo = foo;
        // window.foo = foo; // Not Possible
    }());
    

    我在浏览器上运行的常规HTML中进行了测试,运行正常。示例如下:

    var globalFoo;
    console.log("O1")
    console.log(globalFoo);
    
    (function(){
        console.log("I1")
        console.log(globalFoo);
    
        var x = 13;
    
        var foo = function() {
            console.log('foo caled ' + x);
            x++;
            return true;
        }
    
        foo();
    
        globalFoo = foo;
    
        console.log("I2")
        console.log(globalFoo); 
    })();
    
    console.log("O1")
    console.log(globalFoo);
    console.log(globalFoo());
    

    Firebug输出为:

    O1
    undefined
    I1
    undefined
    foo caled 13
    I2
    function()
    O1
    function()
    foo caled 14
    true