函數的內部屬性————Arguments對象

一、基本點

  1. arguments是一個類數組對象,包含着傳入函數中的所有參數。主要用途是保存函數參數,但這個對象還有一個名叫callee的屬性
  2. argumentscallee屬性是一個指針,指向擁有這個arguments對象的函數。
  3. 函數的內部屬性 arguments的作用: 用於存儲調用函數的時候傳入的所有實參,
  4. arguments是一個類數組對象,他的元素個數取決於實參列表, 和形參無關;
  5. arguments.callee()表示所在函數的引用地址,表示調用函數本身。
function sum(){
    
    console.log(arguments); /*打印出Arguments數組對象,Arguments(3) [10, 30, 50, callee: ƒ, Symbol(Symbol.iterator): ƒ]*/
    let result=0;
    for(let i=0;i< arguments.length;i++){
        result+=arguments[i]
    }
    console.log(result) // 打印實參的相加結果,90
}
sum(10,30,50) /* 調用結果, 打印類數組arguments,arguments上有一個屬性callee,是一個函數-  和90 */



function fn(num1,num2){
    arguments[1] = 10;
    console.log(arguments[0] + num2); 
}
fn(10,20);  /* 將實參列表中的第二個元素賦值爲了 10,此時形參列表也會隨之改變,即此時,num2也變爲了10,故調用結果爲 20  */

分析:

每次執行fn()這個函數,num2的值都會被修改爲10 ,因爲arguments對象中的值會自動反映到num2,但是,num2和arguments[1]的內存空間是不同的。
如果fn()只傳入了一個參數,那麼修改arguments[1]是沒有任何效果的,因爲arguments的長度已經被確定爲1了,沒有第二個參數。

function fn22(num1,num2){
    arguments[1]=10;
    console.log('num2:',num2); 
    console.log(arguments[0]+num2)
 }
fn22(10) /* 打印結果: num2: undefined   NaN  ;因爲 此時num2的值爲undefined, 10+undefined的結果爲NAN*/

參考鏈接https://www.cnblogs.com/yingyingh5/p/7684984.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章