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一样的原理嘛。

  • 相关阅读:
    C# ConfigMan.cs
    C# 反序列化JSON
    C#求数组最大值或最大值位置索引
    C#获取DataGridView数据源DataSource类型
    C#动态添加DataGridView列和行
    C# WinForm 检测文件是否被占用
    C#开源组件NPOI处理Excel导入DataTable数据至Sheet
    C# WinForm 扩展指定列宽适应DataGridView显示行数(二)
    C# WinForm 扩展指定列宽适应DataGridView显示行数
    VFP9 对 SqlServer Image字段的图片存取处理
  • 原文地址:https://www.cnblogs.com/dengmj/p/4845378.html
Copyright © 2011-2022 走看看