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, 如下圖:

 

在此拋磚引玉, 有誤導之處還請不吝指點 ^^.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM