理解函式呼叫_arguments物件作為函式引數的別名
阿新 • • 發佈:2020-12-11
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="../unitl/test.js"></script> <style> #results li.pass {color:green;} #results li.fail {color:red;} </style> </head> <body> <ul id="results"></ul> </body> <script> function infiltrate(person) { // 檢查person引數的值等於gardener,並作為第一個引數被傳入。 assert(person==="gardener",'The person is a gardener'); assert(arguments[0]=== 'gardener','The first argument is a gardener'); //改變argument物件的值也會改變相應的引數。 arguments[0] = 'ninja' assert(person==='ninja','The person is a ninja now'); assert(arguments[0] === 'ninja','The first argument is a ninja'); person = 'gardener'; //這兩種方式下,別名都正常工作了。 assert(person==='gardener','The person is a gardener once more'); assert(arguments[0]==='gardener','The first argument is a gardener again'); } infiltrate("gardener"); </script> </html>
這裡可以說明arguments物件是如何作為函式引數別名的。我們定義了一個函式infiltrate,它只接受了一個引數person,接著我們呼叫他並傳入引數gardener。可以同時通過
函式形參gardener。可以同時通過行數形參person和arguments物件訪問到引數值gardener。
assert(person==='gardener','The person is a gardener');
assert(argements[0]==='gardener','The first argument is a gardener');
因為arguments物件是函式引數的別名,所以如果改變了arguments物件的值,同時也會影響對應函式引數。
arguments[0] = 'ninja';
assert(person==='ninja','The person is a ninja now');
assert(arguments[0]==='ninja',"The first argument is a ninja");
避免使用別名
將arguments物件作為函式引數的別名使用會影響程式碼的可讀性,因此在javaScript提供的嚴格模式(strict mode)將無法再使用它。