繁体   English   中英

您是否应该使用局部内部函数?

[英]Should you ever use local inner functions?

通常,在编写JavaScript时,哪种方法更好。 Foo,bar和baz特定于此功能,因此不会在其他功能的其他任何地方使用。

function() {
    foo();
    bar();
    baz();
}

function foo() {
    //lines of code
}

function bar() {
    //lines of code
}

function baz() {
    //lines of code
}

要么

function() {
    function foo() {
        //lines of code
    }
    foo();
    function bar() {
        //lines of code
    }
    bar();
    function baz() {
        //lines of code
    }
    baz();
}

第一种方法的优点是效率更高,因为如果您多次调用该函数,则一次创建其他函数只需一次。 它也更容易阅读,因为主要的外部函数现在只有3行,而且不再长。

我可以想到的第二个唯一优点是,这些功能使外部函数私有,并且文件的其余部分无法访问这些函数,这很好,因为这些函数不会在其他任何地方使用。 显然,通常情况下,当不需要将其公开时,将它们公开是不好的,但是在这样的JavaScript情况下,它的重要性不那么重要。

您是否可以根据函数被调用的频率或其他任何方式进行不同选择?

  • 如果您希望所有功能可以自己公开使用,请分别声明它们

     function foo() {} // Public, created once function bar() {} // Public, created once function baz() {} // Public, created once var fooBarBaz = function() { // Public, created once foo(); bar(); baz(); }; 
  • 如果您希望辅助功能能够访问主功能的范围,并且要折衷考虑每次调用主功能时都必须重新创建它们,那么请将辅助功能放在主功能中

     var fooBarBaz = function() { // Public, created once function foo() {} // Private, created at each fooBarBaz call function bar() {} // Private, created at each fooBarBaz call function baz() {} // Private, created at each fooBarBaz call foo(); bar(); baz(); }; 
  • 如果要使辅助功能保持私有,并且不想在每次调用主功能时都重新创建它们,请使用IIFE

     var fooBarBaz = (function() { // IIFE function foo() {} // Private, created once function bar() {} // Private, created once function baz() {} // Private, created once return function() { // Public, created once foo(); bar(); baz(); }; })(); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM