在函數中,經常會使用arguments[]
這個鬼來在跟蹤當前函數的參數傳遞狀況,今天就來分析一下arguments[]
是如何來跟蹤參數的javascript
function fn(x){ x = 10; arguments[0] = 20; console.log(x,arguments[0]); //x = 10; arguments[0] = 20; } fn(); console.log(window.x);// undefined console.log(x);// x is not defined
這種狀況下,沒有實參的傳遞,參數與arguments
沒有創建聯繫,二者相互獨立的.
還須要說明一點: x = 10
,在沒有var
定義的狀況下,認爲是全局變量,但是並非咱們想象的那樣. 實際上 在定義形參時,函數內部就聲明瞭一個變量,var x
在函數內部聲明.html
function fn(x){ arguments[0] = 20; console.log(x,arguments[0]) } fn(); // undefined 和 20
這種狀況下,也是沒有傳遞實參,函數內只有var x
聲明,可是並無賦值,因此x
就是undefined
,參數和arguments
也沒有創建聯繫.java
function fn(x){ x = 10; arguments[0] = 20; console.log(x,arguments[0]); // 20 20 } fn(1);
有實參傳入,此時,參數和arguments
創建聯繫,arguments[0]
將x
的值覆蓋掉.函數
function fn(x){ arguments[0] = 20; console.log(x,arguments[0]) //20 20 } fn(1);
實參傳入,與實例3相同,參數和arguments
創建聯繫,arguments[0]
將x
的值覆蓋掉.code
實參,影響着arguments[]
與參數之間的聯繫,htm
嚴格模式下,arguments
再也不追蹤參數的變化blog