亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在ES6 / Typescript中將_(下劃線)變量與箭頭函數一起使用

在ES6 / Typescript中將_(下劃線)變量與箭頭函數一起使用

料青山看我應如是 2019-12-12 14:10:10
我在一個Angular示例中遇到了這個構造,我想知道為什么選擇了這個構造:_ => console.log('Not using any parameters');我了解變量_表示不在乎/不使用,但是由于它是唯一的變量,因此沒有任何理由更喜歡使用_:() => console.log('Not using any parameters');當然,鍵入的字符數不能少于一個。在我看來,()語法可以更好地傳達意圖,并且還更具體地說明類型,因為否則我認為第一個示例應該看起來像這樣:(_: any) => console.log('Not using any parameters');萬一重要,這是使用它的上下文:submit(query: string): void {    this.router.navigate(['search'], { queryParams: { query: query } })      .then(_ => this.search());}
查看完整描述

3 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

之所以可以使用此樣式(可能是在此處使用該樣式)的原因_是比短一個字符()。


可選括號與可選大括號屬于同一樣式問題。這在很大程度上取決于品味和代碼風格,但由于一致性,在這里傾向于冗長。


盡管箭頭函數允許單個參數不帶括號,但它與零,單個解構,單個休止符和多個參數不一致:


let zeroParamFn = () => { ... };

let oneParamFn = param1 => { ... };

let oneParamDestructuredArrFn = ([param1]) => { ... };

let oneParamDestructuredObjFn = ({ param1 }) => { ... };

let twoParamsFn = (param1, param2) => { ... };

let restParamsFn = (...params) => { ... };

盡管is declared but never used錯誤固定在打字稿2.0為下劃線的參數,_也可以觸發unused variable/parameter從棉絨或IDE警告。這是反對這樣做的一個相當大的理由。


_通??梢杂糜诤雎缘膮担ㄈ缫呀浗忉尩钠渌鸢福1M管這可能被接受,但是這種習慣可能會導致與_Underscore / Lodash命名空間發生沖突,并且在存在多個被忽略的參數時也會令人困惑。因此,正確命名帶下劃線的參數(在TS 2.0中受支持)是有益的,還節省了找出函數簽名的時間以及為什么將這些參數標記為忽略的原因(這違背了將_參數作為快捷方式的目的):


let fn = (param1, _unusedParam2, param3) => { ... };

由于上述原因,我個人認為_ => { ... }代碼風格是一種不好的語氣,應該避免。



查看完整回答
反對 回復 2019-12-13
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

該()語法傳達的意圖更好恕我直言,也是更具體的類型


不完全是。()表示該函數不包含任何參數,不聲明任何參數。該函數.length為0。


如果使用_,它將明確聲明該函數將被傳遞一個參數,但您對此并不在意。該函數的.length值為1,這在某些框架中可能很重要。


因此,從類型的角度來看,這可能是更準確的操作(尤其是當您不使用any而是鍵入時_: Event)。正如您所說,鍵入的字符減少了一個字符,在某些鍵盤上也更容易觸及。



查看完整回答
反對 回復 2019-12-13
?
青春有我

TA貢獻1784條經驗 獲得超8個贊

可以區分這兩種用法,并且某些框架使用它來表示不同類型的回調。例如,我認為節點表達框架使用它來區分中間件的類型,例如錯誤處理程序使用三個參數,而路由使用兩個參數。


這樣的區分看起來像下面的例子:


const f1 = () => { } // A function taking no arguments

const f2 = _ => { }  // A function with one argument that doesn't use it


function h(ff) { 

  if(ff.length==0) {

    console.log("No argument function - calling directly");

    ff()

  } else if (ff.length==1) {

    console.log("Single argument function - calling with 1");

    ff(1)

  }

}


h(f1)

h(f2)



查看完整回答
反對 回復 2019-12-13
  • 3 回答
  • 0 關注
  • 377 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號