1. 程式人生 > >形參與區域性變數名相同時js的處理

形參與區域性變數名相同時js的處理

前幾天遇到一個問題,大致就是形參名與區域性變數名相同了,導致後續程式碼取值出錯。唉,感覺大多數的坑都可以歸結為基礎知識的不紮實啊。

當形參與區域性變數相同且區域性變數有賦值時,區域性變數的賦值會覆蓋形參的值。

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的情況了。