2014-11-22 41 views
0

這是我的示例代碼...組織的JavaScript,PHP代碼,方便閱讀的方式,當有嵌套函數

one(); 


function one() 
{ 
    function abc() 
    { 
     //code 
    } 


    function bcd() 
    { 
     //code 
    } 

    abc(); 
    bcd(); 
} 

這是關於PHP,javascript.i想構建這樣的代碼易於讀取的方式或而不使用面向對象的編程技術。

如何從外部函數調用函數abc ..?

+1

通常,您不會在範圍窄於您想要使用它的範圍內定義函數。 – Quentin 2014-11-24 10:55:34

+1

使用類或名稱空間來執行此操作。 – ZiTAL 2014-11-24 11:07:06

+0

關於javascript我建議不要嵌套許多匿名函數。如果你去嵌套函數最好給一些名稱,因爲它更容易看到堆棧和調試 – rkmax 2014-11-24 13:47:45

回答

1

有多種方式:

// when using one() as a constructor for an object 
function one() 
{ 
    this.abc = function() { }; 
    this.def = function() { }; 
} 
obj = new one(); 
obj.abc(); 


// prototype 
function one() 
{ 

} 
one.prototype.abc = function() { }; 
one.prototype.def = function() { }; 
obj = new one(); 
obj.abc(); 


// module pattern 
function one() 
{ 
    var abc = function() { }; 
    var def = function() { }; 
    return { 
     abc: abc, 
     def: def 
    } 
} 
obj = one(); 
obj.abc(); 


// or just assign it as a property to your function 
function one() 
{ 

} 
one.abc = function() { } 
one.def = function() { } 
one.abc(); 

選擇任何適合你。

1

您示例中的嵌套函數在函數內作用域,並在函數one()完成後被拋棄;所以他們沒有暴露。

可以使用閉包來揭示函數... How do JavaScript closures work? ... http://www.sitepoint.com/javascript-closures-demystified/ ...但最簡單的方法就是使用函數創建的abc命名空間。

function abc() { 
    abc.def = function() {alert("hello")} 
} 
abc(); // add def function to abc namespace. 
abc.def(); // call def function which is part of the abc object. 

爲了避免對象符號,可以將一個變量傳遞給該函數。

function abc(operator) { 
    function def() {alert("hello")} 

    if (operator == def) {def()} 
} 
abc("def"); 

然而,這變得更加困難比使用對象符號閱讀,因爲我需要看函數來確定發生了什麼地方abc.def()告訴我,我打電話高清(),這是部分的abc。它會導致性能下降,因爲def需要在每次調用時重新創建。