形參與區域性變數名相同時js的處理
阿新 • • 發佈:2018-12-10
前幾天遇到一個問題,大致就是形參名與區域性變數名相同了,導致後續程式碼取值出錯。唉,感覺大多數的坑都可以歸結為基礎知識的不紮實啊。
當形參與區域性變數相同且區域性變數有賦值時,區域性變數的賦值會覆蓋形參的值。
function fn(a) {
console.log(a); // 1
console.log(arguments[0]); // 1
var a = 2;
console.log(a); // 2
console.log(arguments[0]); // 2
}
fn(1)
這裡,當改變函式形參的值時,arguments物件中的值也會一起變動。
當形參與區域性變數相同且區域性變數只有宣告時,js不會覆蓋區域性變數。
function fn(a) {
console.log(a); // 1
console.log(arguments[0]); // 1
var a;
console.log(a); // 是 1 不是 undefined
console.log(arguments[0]); // 1
}
fn(1)
強行解釋一波
var a = 1;
當機器執行上邊程式碼時,其實分兩步執行。
var a; // 宣告提升
a = 1; // 變數賦值
js執行時,除非在執行前的語句,都沒有對a變數賦值的其他語句,a才會被js引擎當作undefined值。
所以這裡當遇到var a
時,js只是做了宣告,並沒有賦值,就不會出現a為undefined的情況了。