<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>java源碼下載>

javascript 函數聲明的優勢分析

大?。?/span>1.98 MB 人氣: 2017-09-30 需要積分:1

  我對箭頭函數絕對是真愛,但要聲明一個頂級函數時,我仍用“土氣”的函數聲明。

  為什么呢?“Uncle Bob” Martin 是這么說的:

  花1小時寫代碼,就要花10小時檢查代碼。查找漏洞都成了寫代碼的一部分了,這個差距太懸殊。就算寫代碼多費點時間,代碼也要簡單易懂?!?Robert C. Martin《Clean Code: A Handbook of Agile Software Craftsmanship》

  相比函數表達式,函數聲明有兩大優勢:

  1

  目的明了

  每天看上千行代碼,快速了解程序員的目的非常重要。

  看看這行代碼:

  const maxNumberOfItemsInCart = 。。.;

  讀完了還是不知道這省略符號是函數還是其他什么值。它可能是:

  const maxNumberOfItemsInCart = 100;

  也可能是:

  const maxNumberOfItemsInCart = (statusPoints) =》 statusPoints * 10;

  如果使用函數聲明就沒有這個麻煩了。

  請看:

  const maxNumberOfItemsInCart = 100;

  對比:

  function maxNumberOfItemsInCart(statusPoints) {

  return statusPoints * 10;

  }

  從一開始目的就很明了。

  不過,如果你的代碼編輯器可以用顏色區分代碼,或者你在用一個 Speed Reader,就當我什么都沒說。

  你們肯定在暗自贊嘆函數聲明既簡潔又迷人吧。

  實際上,僅這一個原因還不足以服人,還有另外一個原因。

  2

  Order of declaration == order of execution

  執行順序和聲明順序一致時,是最理想的。如果能做到執行時才聲明使用 const(常數)關鍵字的值就很厲害了。

  

  都退后,我要開始裝逼了

  Fair warning:接下來我要放大招了——下文“行話”連篇,但你只要明白在聲明之前不能使用常數就好。

  以下的代碼會拋出一個錯誤:

  sayHelloTo(‘Bill’);

  const sayHelloTo = (name) =》 `Hello ${name}`;

  這是因為,當 Java 引擎閱讀代碼時,會綁定(bind)而非初始化sayHelloTo。

  Java 中所有聲明都是提升(hoist)和綁定的,但初始化的方式各自不同。換言之,Java 提升了sayHelloTo的聲明——先閱讀,再置其于頂層,然后創建空間來儲存其值——但在執行之前不會聲明sayHelloTo。

  sayHelloTo綁定和初始化的時間差叫作“暫存死區(TDZ)”。

  如果在瀏覽器里直接使用ES2015(而不是借助Babel等使用ES5),以下的代碼也會拋出錯誤:

  if(thing) {

  console.log(thing);

  }

  const thing = ‘awesome thing’;

  以上的代碼是用var而非const寫的,不會拋出錯誤,因為變量被綁定時會初始化為undefined,而常數被綁定時完全不會被初始化。有點偏題了……

  函數聲明不會有此類 TDZ 問題。如下文,代碼可以是:

  sayHelloTo(‘Bill’);

  function sayHelloTo(name) {

  return `Hello ${name}`;

  }

  這是因為函數聲明在被綁定時就被初始化了——這是在執行代碼之前。

  所以不論何時進行函數聲明,代碼開始執行時,語法都是符合其作用域的。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
      <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
      <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
      <acronym id="s8ci2"></acronym>
      <acronym id="s8ci2"><center id="s8ci2"></center></acronym>