js 函数参数设置默认值,js 调用方法中的参数

本篇文章给大家谈谈js 函数参数设置默认值,以及js 调用方法中的参数,希望对各位有所帮助,不要忘了收藏本站喔。

基本类型和复合类型的参数传递

对于基本类型参数, JavaScript 采用值传递方式,当通过实参调用函数时,传入函 数里的并不是实参本身 ,而是实参的副本因此在函数中修改参数值并不会对实参有任何影响,看下面程序。

< type="text/java">
	//定义一个函数,该函数接受一个参数
	function change(argl) 
	{
		//对参数赋值,对实参不会有任何影响
		argl = 10; 
		document.write("函数执行中 argl 的值为 :" + argl + "<br/>"); 
	}
	//定义变量x的值为5
	var x = 5 ; 
	//输出函数调用之前x的值
	documen.write("函数调用之前x的值为:" + x + "<br>"); 
	change(x) ; 
	document.write("函数调用之后x的值为" + x + "<br>"); 
</>

当使用 x 变量作为参数调用 change()函数时, 并未真正传入 change()函数中 ,传入的仅仅是x的副本,因此在 change()中对参数赋值不会影响 x 的值python for语句用法。代码执行结果如图
在这里插入图片描述
但对于复合类型的参数,实际上采用的依然是值传递方式 ,只是很容易混淆,看如下程序

< type="text/java"> 
        //定 义函数,该函数接受一个参数
        function changeAge(person) 
        {
            //改变 person age 属性
            person.age= 10;
            //输出 person age 屈性
            document.write("函数执行中 person age 值为 :"
             + person.age+ "				<br>") ; 
            //将 person 变蜇直接赋值为 null
            person= null; 
        } 
        //使用JSON法定义 person 对象
        var person= {age : 5}; 
        //输出 person的age 属性
        document.write("函数调用之前 person的age 的值为:"
         + person.age + "<br> " ); 
        // 调用函数
        changeAge (person) ; 
        // 输出函数调用后 erson 实例的 age 属性值
        document.write("函数调用之后 person age 的值为 :"
         + person.age + "<br>"); 
        document.write("person 对象为:" + person );
</>

在这里插入图片描述
上面代码中使用了 JSON 语法创建 person 对象,在上面程序中,传入 changeAge()函数中的不再是基本类型变量,而是一个复合类型变量.
将 person 对象直接赋值为 null,但changeAge()函数执行结束后,后面的 person对象依然是一个对象,并不是 null 这表明 person 本身并未传入 changeAge()函数中,传入 changeAge()函数的依然是副本。

空参数
< type="text/java"> 
        function changeAge(person) 
        { 
            if (typeof person== ' object ') 
            
            //改变参数的 age 屈性
            person . age= 10; 
            //输出参数的 age 屈性
            document.write( "函数执行中 person age 值为 "
            +person . age+ "<br /> " ); 
            else 
            {
                alert("参数类型不符合 :" + typeofperson) ; 
            } 
            changeAge(); 
        }
</>

上面代码的函数声明中包含了一个参数,但调用函数时并没有传入任何参数。这种形式对于强类型语言,如 Java或C都是不允许的;但对于 JavaScript 却没有任何语法问题,因为JavaScript 会将没有传入实参的参数值自动设置为 undefined 值。

由于 调用函数时对传入的实参并没有要求,即使定义函数时声明了了多个形参,调用函数时也并不强制要求传入相匹配的实参,因此 JavaScript 没有所谓的函数“重载”,对于JavaScript 来说,函数名就是函数的唯一标识

如果先后定义两个同名的函数,它们的形参列表并不相同,这也不是函数重载,这种方式会导致后面定义的函数覆盖前面定义的函数

参数类型

JavaScript 函数声明的参数列表无须类型声明,这是它作为弱类语言的一个特征,但由于声明函数时形参无须定义数据类型,所以导致调用这些函数时可能出现问题。
为了解决弱类型语言所存在的问题,弱类型语言提出了所谓“鸭子类型 Duck Type )"
概念:“鸭子类型”的理论认为 :如果弱类型语言的函数需要接受参数,则应先判断
参数类型,并判断参数是否包含了需要访问的属性、方法。只有当这些条件都满足时,程序才开始真正处理调用 参数 的属性、方法。看如下代码。

< type="text/java">
    //定义函数 changeAge, 函数需要一个参数
    function changeAge(person)
    { 
    //首先要求 person 必须是对象,而且 person age 属性为 number
        if (typeof person == 'object' 
        && typeof person.age == 'number') 
        {
        // 执行函数所需的逻辑操作
        document.write("函数执行前 person的age 值为: " 
        + person . age + "<br/> " ); 
        person . age= 10; 
        document.write("函数执行中 person的age 值为:"
        +person.age+ "<br /> "); 
        } 
        //否则将输出提示,参数类型不符合
        else
        {
            document.writeln("参数类型不符合" + 
            typeof person+ "<br />"); 
        } 
    }
    //分别采用不同的方式调用函数
    changeAge(); 
    changeAge ('cxx'); 
    changeAge(true); 
    //采用 JSON 语法创建第一个对象
    p = {abc : 34}; 
    changeAge (p); 
    //采用 JSON 语法创建第二个对象
    person= {age : 25} ; 
    changeAge(person); 
</>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值