[英]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.