2010-07-05 150 views
2

我有以下匿名函數:JavaScript的匿名函數範圍

(function() { 
var a = 1; 
var b = 2; 

function f1() { 
} 

function f2() { 
} 

// this => window object! 
// externalFunction(this); 
})(); 

function externalFunction(pointer) { 
// pointer.f1(); => fail! 
} 

我需要從這個匿名函數調用外部函數,並將它傳遞的指針調用函數F1 F2 &。 但我不能這樣做,因爲這是指窗口對象而不是內部作用域。

我可以設置功能:

this.f1 = function() {} 

但它的壞主意,因爲他們會在全球空間...

如何我可以通過匿名空間,外部功能?

回答

9

我仍然不知道你爲什麼會做功能是私有的,所需要的外部... 不過你去那裏:

(function() { 
    var a = 1; 
    var b = 2; 

    var obj = { 
    f1: function() { 
    }, 
    f2: function() { 
    } 
    } 

    externalFunction(obj); 
})(); 

function externalFunction(pointer) { 
    pointer.f1(); // win 
} 

或者您也可以通過F1和F2獨立,那你就不要需要將它們放入一個對象中。

+0

是的,你的權利,聽起來很奇怪,但我需要這種行爲。 – 2010-07-05 12:05:21

3

你不可錯過的範圍爲對象,但你可以創建任何你從範圍希望對象:

externalFunction({ f1: f1, f2: f2 });