• 理解函数调用_arguments对象作为函数参数的别名


    <!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)将无法再使用它。
    
  • 相关阅读:
    在HttpHandlers (ASHX files)中使用Session
    EventCalendar控件源码和ASP.NET 2.0 Beta 2 Starter Kits中可能遇到的问题
    C# 获取数据库中某个某个表的创建脚本[原创]
    Linq 合并多个查询条件
    自定义WCF RIA Services 超时时间
    也来学学插件式开发续利用MEF
    HTML5程序设计 Geolocation API
    反射实体模型生成Oracle SQL脚本
    Entity Framework With Oracle
    Entity Framework Code First在Oracle下的伪实现
  • 原文地址:https://www.cnblogs.com/jamal/p/14120470.html
Copyright © 2020-2023  润新知