zoukankan      html  css  js  c++  java
  • 浅析JavaScript函数的参数

      ECAMScript函数不介意传递进来多少个参数,也不介意传递的参数的类型,即使定义的函数只接受两个参数,当调用该函数时没有传递参数,甚至传递了三个参数等等都无所谓,这是因为在ECAMScript中参数在内部是用一个数组表示的,函数接受到的始终是一个数组。在函数体内可以通过arguments对象来访问这个参数数组,获取到传递的每一个参数值。arguments[0]可以用来访问调用该函数时传递的第一个参数,以此类推...以下两个函数function1和function2其实是等价的可以实现同样的效果。注:在实际中不要把两个同名函数定义在一个页面中,后面的函数会覆盖前面的函数。ECAMScript中没有类似于Java中的重载。

    1 //function1
    2 function sayHi(name, message){
    3   alert("name: " + name + "message: " + message);  
    4 }
    5 
    6 //function2
    7 function sayHi(){
    8   alert("name: " + arguments[0] + "message: " + arguments[1]);  
    9 }

      以上这个例子说明了函数中定义的参数其实只是提供了便利了而已,不是必须的。可以通过访问arguments的lenght属性得到调用该函数时传递了多少个参数。

      有一个比较有趣的地方是arguments始终与函数相应命名参数同步。当我们使用arguments对象修改了参数的值时,下面arguments[1]改变了传入的第二个参数的值,而num2同时做出了改变,然而它们并不是访问相同的内存空间,它们的内存空间是独立地,但是值会保持同步。

    1 function doAdd(num1, num2){
    2       arguments[1] = 10;
    3       return arguments[0] + num2;            
    4 }

      以上函数如果执行doAdd(10),则第一个参数会赋值10,而第二个参数会赋值undefined。

      另外,ECAMScript中所有参数传递的都是值,不可能通过引用传递参数,跟java一样的原理嘛。

  • 相关阅读:
    重写、隐藏基类方法(new, override)
    Java FileHandler
    JMS example
    DB Locker
    计算与所有线段都重合的线段数目
    [转载] linux内存 问题
    oracle rownum & rowid mark a good tool
    java Wget Download
    java new way to implement singleton, use enum
    HttpPut Multipart and handle https request.
  • 原文地址:https://www.cnblogs.com/dengmj/p/4845378.html
Copyright © 2011-2022 走看看