2012-03-26 45 views
0

我在javascript中有一個主要功能是功能的(){這裏的一些代碼},我也有,看起來像調用在JavaScript函數作爲全局函數

function a() { 

    function b() { 

     // some code here 
    } 

} 

這個主要功能的子功能現在我想直接調用函數b。那麼如何做到這一點。

+0

聲明函數的函數。多麼乖乖!;)難道你不能簡單地剪切/粘貼b()使它與()(全局腳本級別,因此是全局可見性)在同一級別上嗎? – 2012-03-26 05:43:00

回答

1

你可以嘗試明確地暴露b全局對象像這樣的:

function a() { 

    function b() { 

     // some code here 
    } 

    window.exposed = b; 
} 
+0

如果主機環境沒有窗口對象? – RobG 2012-03-26 08:07:28

0

不要聲明函數B的功能裏面,只是把它像這樣

function b() { 
some code here 
} 

function a() { 
b(); 
} 
+0

這是一個明顯的答案,但它缺少關於如何從'b'訪問'a'的當地人的討論,即如何提取'a'的當地人以使封閉等價。 – 2012-03-26 05:40:17

+0

爲什麼不把它正確地編碼?全球呼叫您的全球通。 – user1289347 2012-03-26 06:09:41

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(); 
0

這裏有很多的解決方案,是唯一一個我認爲這將是西裝的功能附加到全局對象,所以它看起來像一個DECL ared函數。唯一的區別是,它不會使用,直到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.call(this); 

或其它一些適合的參照全局對象。

我已經使用窗口敬而遠之,因爲這是不可靠的,不只是因爲非瀏覽器的主機可能不會有窗口對象。