我在javascript中有一個主要功能是功能的(){這裏的一些代碼},我也有,看起來像調用在JavaScript函數作爲全局函數
function a() {
function b() {
// some code here
}
}
這個主要功能的子功能現在我想直接調用函數b。那麼如何做到這一點。
我在javascript中有一個主要功能是功能的(){這裏的一些代碼},我也有,看起來像調用在JavaScript函數作爲全局函數
function a() {
function b() {
// some code here
}
}
這個主要功能的子功能現在我想直接調用函數b。那麼如何做到這一點。
你可以嘗試明確地暴露b
全局對象像這樣的:
function a() {
function b() {
// some code here
}
window.exposed = b;
}
如果主機環境沒有窗口對象? – RobG 2012-03-26 08:07:28
不要聲明函數B的功能裏面,只是把它像這樣
function b() {
some code here
}
function a() {
b();
}
這是一個明顯的答案,但它缺少關於如何從'b'訪問'a'的當地人的討論,即如何提取'a'的當地人以使封閉等價。 – 2012-03-26 05:40:17
爲什麼不把它正確地編碼?全球呼叫您的全球通。 – user1289347 2012-03-26 06:09:41
你不能。不過你可以這樣做:
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();
這裏有很多的解決方案,是唯一一個我認爲這將是西裝的功能附加到全局對象,所以它看起來像一個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);
或其它一些適合的參照全局對象。
我已經使用窗口敬而遠之,因爲這是不可靠的,不只是因爲非瀏覽器的主機可能不會有窗口對象。
聲明函數的函數。多麼乖乖!;)難道你不能簡單地剪切/粘貼b()使它與()(全局腳本級別,因此是全局可見性)在同一級別上嗎? – 2012-03-26 05:43:00