在javascript中调用函数作为全局函数

时间:2012-03-26 05:34:57

标签: javascript jquery

我在javascript中有一个main函数,它是函数a(){这里有些代码},我在这个main函数中也有一个子函数,看起来像

function a() {

    function b() {

        // some code here
    }

}

现在我想直接调用函数b。然后怎么做。

4 个答案:

答案 0 :(得分:3)

你做不到。但是你可以这样做:

function a() {

    this.b = function () {

        some code here
    }
}

然后称之为:

var x = new a();
a.b();

您还可以使用您的函数创建对象文字:

var a = {
  b: function ()
     {
       //some code here
     }
};

然后说:

a.b();

您还可以在函数对象本身上创建一个属性,并以这种方式访问​​它:

function a()
{
};

a.b = function ()
{
  //Some code here
};   

然后用:

来调用它
a.b();

答案 1 :(得分:1)

您可以尝试将b显式公开给全局对象,如下所示:

function a() {

    function b() {

        // some code here
    }

    window.exposed = b;
}

答案 2 :(得分:0)

不要在函数a中声明函数b,只需像这样调用它

function b() {
some code here
}

function a() {
b();
}

答案 3 :(得分:0)

这里有很多解决方案,我认为唯一适合的是将函数附加到全局对象,使其看起来像声明的函数。唯一的区别是它在a运行之前不可用:

function a() {

  // Protect against ES5 strict mode, assume function is called as global code
  if (typeof this !== undefined) {
    this.b = function() { /* whatever */ };
  }
}

或者以下可能更适合您的编码风格:

function a() {

  function b() { /* whatever */};

  if (typeof this !== undefined) {
    this.b = b;
  }
}

简称为:

a();

然后在ES3或ES5非严格模式下,它将按预期工作。要克服ES5严格的限制,上面的内容会导致 未定义,请将 a 作为全局代码调用并明确设置 this

a.call(this);

或对全局对象的一些其他合适的引用。

我没有使用 window ,因为这不太可靠,尤其是因为非浏览器主机可能没有 window 对象。