[JS] return 一個函數,並定義了名稱的作用是什么?



function test(){
// 在一個函數體里,返回類型是函數
// 按我理解,直接返回匿名函數就行了,但有時見到的,是定義了名稱的
// 不理解這樣有什么,定義了名稱有什么意義?
 return function newFunc(){
     //....
  }
}


比較常見的,在NG里,創建的controller,也是會定義帶名稱的函數。

7 个解决方案

#1


貼出具體的、公認的類庫中例子。

#2


javascript 的函數就是類型,同時也是類型的 constructor 函數。因此類型中完全可能定義具體名稱的屬性、方法函數。但是不是你這種設計概念。

如果你認為流行的類庫中也常有這類寫法,精選2、3個 demo 貼出來。

#3


編程的確要追求更簡潔的寫法,但同時,也要追求可閱讀性。

比如這個 test() 函數,完全可以寫成 t(),為什么要多寫三個字母呢?有時候代碼簡潔了,卻要寫更多的注釋去幫助理解,其實並沒有減少工作量。

我也覺得這個函數寫成具名的沒有直接的作用,可能是作者覺得這樣更容易理解,相當於寫了一句注釋:“看!我返回一個新函數了!”

#4


自己寫一些 公共方法  的 時候 會用  return ,一般你的 第一種方法就可以了

#5


引用 1 樓 sp1234 的回復:
貼出具體的、公認的類庫中例子。


謝謝關注。
例如在nodes in action一書中,中文翻譯版,第119頁,關於logger的中間件示例代碼:

function setup (format) {
    var regexp = /:(\w+)/g;
    return function logger(req, res, next){
        // codes....
    }

// 例如上面這個返回的函數,在我看來,logger這個命名,完全不必要的。
// 直接 return function(req, res, next)...不就行了
// 因為命名,跟不命名,我覺得是完全沒有區別的,也不能帶來其它實質的程序影響
// 難道不是嗎?
}

#6


引用 3 樓 closurer 的回復:
編程的確要追求更簡潔的寫法,但同時,也要追求可閱讀性。

比如這個 test() 函數,完全可以寫成 t(),為什么要多寫三個字母呢?有時候代碼簡潔了,卻要寫更多的注釋去幫助理解,其實並沒有減少工作量。

我也覺得這個函數寫成具名的沒有直接的作用,可能是作者覺得這樣更容易理解,相當於寫了一句注釋:“看!我返回一個新函數了!”


謝謝關注。
感覺有點道理,否則我也實在想不出其它什么作用。

#7


引用 2 樓 sp1234 的回復:
javascript 的函數就是類型,同時也是類型的 constructor 函數。因此類型中完全可能定義具體名稱的屬性、方法函數。但是不是你這種設計概念。

如果你認為流行的類庫中也常有這類寫法,精選2、3個 demo 貼出來。



還是node in action中文版第124頁。
關於connect


app.use(function hello(req, res){
        // code....
    })
    .listen(3000);
// use()中的函數,在我看來,app.use(function(req, res){})跟 app.use(function hello(req, res){})
// 這兩種方式沒有任何區別,命名后,對程序而言,沒有任何影響。
// 對不對?那為什么要多此一舉給一個本應該是匿名函數進行命名呢?


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com