在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/C  HTML/ 關(guān)于Airbnb的《Iterators and Generators》eslin

關(guān)于Airbnb的《Iterators and Generators》eslint規(guī)則的疑惑

圖片描述

  1. 沒有看懂why的那一段是什么意思,求解答。
  2. 如果我要在循環(huán)的迭代時(shí)候,有一個(gè)判斷語句是可以提前return、break、continue。
    那么現(xiàn)在使用了Airbnb的eslint規(guī)則不推薦使用for...of語法,推薦使用高階函數(shù),那么就不能提前return,怎么辦? 需要把循環(huán)迭代走完才return嗎?
回答
編輯回答
她愚我
  1. 首先map() / every()方法可以保證數(shù)組的不變性,而for完全取決于你寫代碼的人。
  2. 語義規(guī)則很明顯,知道你要干嘛。
  3. 這些方法使用的算法實(shí)現(xiàn)都比較快(可能不如你定制的實(shí)現(xiàn)快但足夠通用),其次引擎本身還會對他進(jìn)行優(yōu)化。
  4. 當(dāng)然使用這些方法未必能精確控制,但是通常并不需要(基本都有對應(yīng)應(yīng)用場景的方法)。
2017年12月26日 13:11
編輯回答
忘了我

樓上說的挺好的了,不知道為啥有人點(diǎn)了個(gè)反對,我補(bǔ)充一些:

  • 之前在重構(gòu)一次公司項(xiàng)目的時(shí)候,發(fā)現(xiàn)之前的程序員大概就是 for..in for..of 一把梭,這種代碼看多了,就會變得很懵逼,因?yàn)槟悴⒉恢肋@個(gè) for 循環(huán)到底在干什么,也就是樓上提到的第二點(diǎn)
  • 有時(shí)候遍歷需要加一些過濾邏輯,然后再 for 循環(huán)語句塊中就會有大量的 if..else,進(jìn)一步加深了懵逼程度
  • 另外 for..in 有一個(gè)問題就是,它會列舉所有可枚舉的屬性,這樣一個(gè)對象實(shí)例在創(chuàng)建時(shí),繼承于原型的可枚舉屬性也會被遍歷到了,因此 if(foo.hasOwnProperty) 在一些情況下都要寫,很麻煩
  • 使用 map、filter、reduce 等方法與等效的 for..in 或 for..of 在結(jié)果上是相同,但是編寫代碼的思想是不同的,前者是面向邏輯,而后者是面向過程
  • 面向邏輯是函數(shù)式編程的一個(gè)特點(diǎn),如果你稍微了解一些函數(shù)式的東西,會有一個(gè)很重要的純函數(shù)的概念(具體是什么可以網(wǎng)上查一查),一般而言,業(yè)務(wù)都是復(fù)雜的,大型應(yīng)用編寫難度高很大程度上因?yàn)闃I(yè)務(wù)復(fù)雜度高,如果我們可以保證實(shí)現(xiàn)業(yè)務(wù)的代碼,竟可能的具有純函數(shù)的特性,那么可以有效降低項(xiàng)目復(fù)雜度,降低風(fēng)險(xiǎn)

以上是關(guān)于你問題描述中的第一點(diǎn)的答案,下面說一下第二點(diǎn)。

如果你使用 map 或 forEach 想提前跳出的話,可以這樣:

try {
arr.forEach(function(e){
  // todo something...
  throw new Error('foo')  
})
} catch(e) {}

雖然方法偏 hack,但確實(shí)有用。

不過話說回來,使用這些方法講究的是映射關(guān)系的抽象,如果將邏輯進(jìn)行合理抽象,其實(shí)多做幾次循環(huán)的時(shí)間損耗在性能上真的微不足道,相反,如果利用一些函數(shù)式的工具庫將這些業(yè)務(wù)代碼進(jìn)行組合(compose),反而可以提高性能。

題主有時(shí)間可以了解一下 ramdajs 這個(gè)工具庫。

2018年6月13日 17:22