簡體   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