zoukankan      html  css  js  c++  java
  • 函数参数浅析-读书笔记

    ECMAScript函数不介意传递的参数个数,因为在其内部是用一个数组进行表示的。在函数体内可以通过arguments对象来访问这个参数数组,就像我们正常访问数组一样处理。

    arguments对象只是与数组类似,并不是array的实例。我们可以通过方括号语法访问arguments的每一个元素(arguments[0],arguments[1]。。。。),可以用length属性确定传递进来的参数个数。

    function sayHi() {
      alert("Hello " + arguments[0] + "," + arguments[1]);
    }

    function sayHi(name, message) {
      alert("Hello " + name + "," + message);
    }

    第一种写法是重写第二种表达方式的,为了突出ECMAScript的一个重要特点:命名的参数只提供便利,但不是必需的

    可以通过访问arguments对象的length属性获取有多少个参数传递给了函数。

    function howManyArgs() {
      alert(arguments.length);
    }
    howManyArgs("string", 45); //2
    howManyArgs(); //0
    howManyArgs(12); //1

    我们也可以让函数能够接收任意个参数实现适当的功能,例如:

    function doAdd() {
      if(arguments.length == 1) {
        alert(arguments[0] + 10);
      } else if (arguments.length == 2) {
        alert(arguments[0] + arguments[1]);
      }
    }
    doAdd(10); //20
    doAdd(30, 20); //50

    另外一个重点是:arguments对象可以与命名参数一起使用,例如:

    function doAdd(num1, num2) {
      if(arguments.length == 1) {
        alert(num1 + 10);
      } else if (arguments.length == 2) {
        alert(arguments[0] + num2);
      }
    }

    在上面这个重写的函数中,num1与arguments[0]相同,num2与arguments[1]相同,因此他们可以互换。

    还有一个有趣的点,arguments对象的值永远与对应命名参数的值保持同步。

    function doAdd(num1, num2) {
      arguments[1] = 10;
      alert(arguments[0] + num2);
    }
    
    doAdd(10, 20);//20

    加了'use strict'

    function doAdd(num1, num2) {
    
      'use strict';
    
      arguments[1] = 10;
      alert(arguments[0] + num2);
    }
    doAdd(10, 20);//30

    严格模式对如何使用arguments 对象做出了一些限制。首先,像前面例子中那样的赋值会变得无效。

    参考资料

    《javascript高级程序设计(第3版)》第3章 基本概念 

  • 相关阅读:
    Redis之String
    代码质量管理工具——SonarQube
    XML文件(2)--使用DOM4J示例
    XML文件(1)--使用DOM示例
    Maven之构件
    使用JS,获取URL中指定参数的值
    jQuery导入Eclipse后报错解决方法
    关于MySQL存储过程中遇到的一个错误
    学习MySQL之数据类型(四)
    jmeter直连数据库【转】
  • 原文地址:https://www.cnblogs.com/winteronlyme/p/6697798.html
Copyright © 2011-2022 走看看