js函數參數的追蹤者--arguments

在函數中,經常會使用arguments[]這個鬼來在跟蹤當前函數的參數傳遞狀況,今天就來分析一下arguments[]是如何來跟蹤參數的javascript

實例1

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

實例2

function fn(x){
        arguments[0] = 20;
        console.log(x,arguments[0])
    }
    fn();
    // undefined  和 20

這種狀況下,也是沒有傳遞實參,函數內只有var x聲明,可是並無賦值,因此x就是undefined,參數和arguments也沒有創建聯繫.java

實例3

function fn(x){
        x = 10;                      
        arguments[0] = 20;
        console.log(x,arguments[0]); // 20 20
    }
    fn(1);

實參傳入,此時,參數和arguments創建聯繫,arguments[0]x的值覆蓋掉.函數

實例4

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

相關文章
相關標籤/搜索