理解函数调用_使用严格模式边使用arguments别名
阅读原文时间:2023年07月09日阅读:1
<!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');

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章