首頁  >  文章  >  web前端  >  深入理解函數形參和函數內部宣告變數或函數重名時的問題

深入理解函數形參和函數內部宣告變數或函數重名時的問題

yulia
yulia原創
2018-09-19 14:48:072072瀏覽

最近比較閒,整理了一些JavaScript中的小知識,比如,有些面試題中會出現函數的形參和函數內部聲明的變數或函數重名, 那麼是個什麼情況呢?想知道的朋友繼續往下看吧。

function ab(x){ 
    console.log(x); 
    var x; 
    console.log(x); 
}; 
ab(3);

 深入理解函數形參和函數內部宣告變數或函數重名時的問題

出現這種結果, 但是, 當函數中宣告的變數是被賦了值, 就會頂替掉傳進來的參數.

function ab(x){ 
    console.log(x); 
   var x = 4;
    console.log(x); 
}; 
ab(3);

輸出結果為:  .

 深入理解函數形參和函數內部宣告變數或函數重名時的問題

當函數中宣告的函數與形參重名稱時:

function ab(x){ 
  console.log(x); 
  function x(){
    console.log("我是函数")
  }; 
  console.log(x); 
}; 
ab(3);

輸出結果為:

深入理解函數形參和函數內部宣告變數或函數重名時的問題

#為什麼會有這種情況? JS的特性之一就是函數宣告提升, 這條在函數內部也適用, 就是說, 函數體內宣告的函數會提升到函數的第一行, 所以ab 在呼叫時x 一傳進去就不是3 了.

但把匿名函數賦值給變數的方式因沒有函數宣告提升的特性, 所以在宣告之後才會改變x, 如下圖:

 深入理解函數形參和函數內部宣告變數或函數重名時的問題在此拋磚引玉, 有誤導之處還請不吝指點^^。

以上是深入理解函數形參和函數內部宣告變數或函數重名時的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn