有些面試題中會出現函數的形參和函數內部聲明的變量或函數重名, 那么是個什么情況呢?
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, 如下圖:
在此拋磚引玉, 有誤導之處還請不吝指點 ^^.