2014-11-22 40 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需要在每次调用时重新创建。