Javascript进阶(7)---函数参数

arguments对象

  在JavaScript中,谈到函数参数,就不得不说一说那个熟悉又陌生的argunemts

  • arguments对象用于承载调用函数时候传入的参数
  • arguments不是一个数组,但是十分类似一个Array,有length属性,也可以用下标去访问
  • arguments对象的长度是由实参个数而不是形参个数决定的。形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。对于arguments和值都存在的情况下,两者值是同步的,但是针对其中一个无值的情况下,对于此无值的情形值不会得以同步。如下代码可以得以验证。

    function f(a, b, c) {
      console.log(arguments.length); // result: "2"
      a = 100;
       console.log(arguments[0]);    // result: "100"
      arguments[0] = ‘qqyumidi‘;
       console.log(a);               // result: "qqyumidi"
       console.log(c);               // result: "undefined"
       c = 2012;
       console.log(arguments[2]);    // result: "undefined"
    }
    f(1, 2);                  //实际上只传了两个参数

    此处证明,函数内部的形参一开始为空的时候,则内部形参的值与arguments对应位置的值就不会同步了

    (本引用参考自http://www.cnblogs.com/lwbqqyumidi/archive/2012/12/03/2799833.html)

  • 在Javascript中,函数名相同,传参数目/类型不同,不会被视为两个函数。也不会像JAVA一样进行函数的重载,利用arguments对象则可以在Javascript中模拟出重载的效果

    function fun() {
      if (arguments.length == 0) {
        //  do sth;
      }
      if (arguments.length == 1) {
        if (typeof (arguments[0]) == ‘function‘) {
          //  do sth for function
        }
      }
      if (arguments.length == 2) {
        //  do sth;
      }
    }
  • 在Javascript中传参的个数并不会影响函数被调用  

    function fun(){
        return arguments[0] + arguments[1];
    }
    fun(3,5);      // 8
    fun(3);        // NaN
    fun();         //NaN

    例子中的aruguments[0]和aruguments[1],若未传入,则值为NaN

  • arguments对象中有一个实用的属性:callee

    function count(a){
    
        console.log(arguments.callee);
    }
    
    count(10);// count(a)

    返回这个函数本身

传入过量参数

  • 当调用某个函数时,传入了过多的参数怎么办?
  • 在函数声明的时候使用“...rest”的方式来表示剩余的参数(rest为任意合法名称,为一个数组)

    function fun(a, b, ...restArray) {
      console.log(‘我们接收了:‘ + a + ‘与‘ + b);
      var count=2;
      for (var x of restArray){
      count++;
      console.log("第"+count+"个是:"+x);
      }
    }
    fun(1, 8, 9, 5,8,9,6,4,8,7,8,9);
    /*
    我们接收了:1与8
    第3个是:9
    第4个是:5
    第5个是:8
    第6个是:9
    第7个是:6
    第8个是:4
    第9个是:8
    第10个是:7
    第11个是:8
    第12个是:9
    */

    Javascript将会把多余的参数使用一个自定义名称的数组将其存放起来

传入的参数不够

  当调用某个函数的时候,传入的参数不够(传入的参数比接收的少),javascript就会以undefined去代替缺少的参数。这样一来,就有可能影响原函数内部的操作,现ES 6推行允许给参数福默认值,在传参缺少时,直接使用默认值。

function fun(a = "我是A", b = "我是B", c){
    console.log(a + " " + b + " " + c);
  }

fun("我是A的表姐");//我是A的表姐 我是B undefined
时间: 2024-10-12 09:00:53

Javascript进阶(7)---函数参数的相关文章

JavaScript的最大函数参数长度和最大栈深度检测

也许一般代码不会触及最大参数长度和最大栈深度,但某些特殊场合,检测这两个参数还是有必要的 例如:用递归计算斐波那契数列的第n个值,不了解最大栈深度,难免显得肤浅 又例如:将一串charCode转成String,不了解最大参数长度,采用字符串拼接的方式,效率提不上,特别是在串较长的情况下 function getMaximumSupportedArgumentsLength(){ var args={length:0}; function noop(){} function test(n){ ar

javascript Math.random函数参数

random函数参数 无参数 random函数返回值 返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) random函数示例 document.write(Math.random()); 返回随机数 document.write(Math.random()*(20-10)+10); 返回10-20的随机数 document.write(Math.random()*(n-m)+m); 返回指定范围的随机数(m-n之间)的公式 javascript Math.random函数参数

JavaScript强化教程——函数参数

本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 -- 函数参数 JavaScript 函数参数 JavaScript 函数对参数的值(arguments)没有进行任何的检查. 函数显式参数与隐藏参数(arguments) 在先前的教程中,我们已经学习了函数的显式参数: functionName(parameter1, parameter2, parameter3) {     code to be executed } 函数显式参数在函数定义时列出.

JavaScript命名空间、函数参数类型重载的实现

突然心血来潮写的东西,可以考虑在func({arg1: xxx, arg2: xxx})不适用的情况下使用. <!DOCTYPE html> <html lang="zh"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <title>命名空间.参数类型重载</title>

Javascript进阶(6)---函数声明

------------- JS中的函数也是一种对象 函数的返回值是return来决定的,没有则返回undefined 1.函数声明法 function add(a, b) { a = a + a; b = b + b; } 2.函数表达式法 var add = function (a , b){ ......}; (function(){......}()); return function (){......} var add =function foo(a,b){......}; //命名

函数参数,返回值,递归函数

函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形式 无参数,无返回值 无参数,有返回值 有参数,无返回值 有参数,有返回值 定义函数时,是否接收参数,或者是否返回结果,是根据 实际的功能需求 来决定的! 如果函数 内部处理的数据不确定,就可以将外界的数据以参数传递到函数内部 如果希望一个函数 执行完成后,向外界汇报执行结果,就可以增加函数的返回值

JavaScript进阶系列02,函数作为参数以及在数组中的应用

有时候,把函数作为参数可以让代码更简洁. var calculator = { calculate: function(x, y, fn) { return fn(x, y); } }; var sum = function(x, y) { return x + y; }, diff = function (x, y) { return x - y; }; var sumResult = calculator.calculate(2, 1, sum), diffResult = calculat

JavaScript进阶系列04,函数参数个数不确定情况下的解决方案

本篇主要体验函数参数个数不确定情况下的一个解决方案.先来看一段使用函数作为参数进行计算的实例. var calculate = function(x, y, fn) { return fn(x, y); }; var sum = function(x, y) { return x + y; }; var diff = function(x, y) { return x - y; }; var sumResult = calculate(1, 2, sum), diffResult = calcu

JavaScript进阶系列01,函数的声明,函数参数,函数闭包

本篇主要体验JavaScript函数的声明.函数参数以及函数闭包. □ 函数的声明 ※ 声明全局函数 通常这样声明函数: function doSth() { alert("可以在任何时候调用我"); } 通过这种方式声明的函数属于Window对象,可以在任何地方调用,即在doSth方法的之前和之后都可以调用. 可以在doSth方法之前调用: doSth(); function doSth() { alert("可以在任何时候调用我"); } 可以在doSth方法之