理解函式呼叫_使用嚴格模式邊使用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> "use strict"; function infiltrate(person) { // person引數和arguments的第一個值開始是相同的。 assert(person==='gardener','The person is a gardener'); // 改變第一個引數 assert(arguments[0] === 'gardener','The first arguments is a gardener'); //改變第一個引數 arguments[0] = 'ninja'; //第一個引數值被改變了 assert(arguments[0] === 'ninja','The first argument is now a ninja'); //Person引數的值沒變 assert(person==='gardener','The person is still a gardener'); } infiltrate("gardener"); </script> </html>
第一個程式碼use strict是一個簡單的字串。
這將告訴javascript引擎,我們希望將下面的程式碼在嚴格模式下執行。在本例中,嚴格模式將改變成的執行結果,最終person引數的值和arguments引數的第一個值,
將不再相同。
assert(person==='gardener','The person is a gardener');
assert(arguments[0] === 'gardener','The first argument is a gardener');
但與非嚴格模式不同的是,這一次arguments物件不再作為引數的別名。如果你想通過arguments[0]='ninja'改變第一個引數的值,這將不會同時改變person引數。
assert(arguments[0]==='ninja','The first argument is now a ninja');
assert(person==='gardener','The person is still a gardener');