高级三——函数的参数

< script >
            //ECMAScript函数传递的参数可以是0到多个,可以是任意数据类型。没有函数签名的概念,所以函数不能重载。
            function doAdd ( num1 , num2 ){
                 arguments [ 1 ] = 10 ; //arguments对象可以与命名参数一起使用。
                 alert( arguments [ 0 ] + num2); //NaN。没有传递值的命名参数将被自动赋予undefined。
                 alert( arguments [ 0 ] + arguments [ 1 ]); //15。ECMAScript函数中的命名参数只是提供便利,并不是必须的。
                 alert( arguments .length); //1。arguments对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。
            }
           doAdd( 5 ); //只传入一个参数,所以arguments[1]设置的值不会反应到命名参数中。
            //arguments对象是类数组,不是Array的实例。
      </ script >
     < script >
            function doAdd2 ( num1 , num2 ){
                 arguments [ 1 ] = 10 ; //严格模式下,重写arguments的值会导致错误。
                 alert( arguments [ 0 ] + num2); //30
                  alert( arguments [ 0 ] + arguments [ 1 ]); //30。num2和arguments[1]的内存空间是独立的,但他们的值是同步的。
                 alert( arguments .length); //2
            }
           doAdd2( 20 , 30 );
</ script >
< script >
            function addTen ( num ){
                num += 10 ;
                 return num;
           }
            var count = 20 ;
            var result = addTen(count);
            var num = 30 ;
            var result2 = addTen(num); //如果未对num进行声明并且赋值,此处将会报错。这里的num与函数里面的形参num无关。
            alert(count); //20。参数是按值传递的,所以传递的是20,而不是变量count。
            alert(result); //30
            alert(num); //30
            alert(result2); //40
      </ script >
< script >
            function setName ( obj ){
                obj.name = "Jame" ;
           }
            var person = new Object(); //person指向的对象在堆内存中只有一个,且是全局对象。
            setName(person); //obj和person引用的是同一个对象。
            alert(person.name); //"Jame"
</ script >
< script >
            function setName ( obj ){
                  obj.name = "Jame" ;
                 console .log(obj); //{name: "Jame"}
                  obj = new Object(); // 当在函数内部重写obj时,这个变量引用的就是一个局部对象,这个局部对象会在函数执行完毕后立即被销毁。
                  obj.name = "Tom" ; // 在函数内部修改了参数不会影响到原始的引用person
                  console .log(obj); //{name: "Tom"}
            }
            var person = new Object();
           setName(person); //(参数是按值传递,而不是按引用传递)多了这句话反而不好理解。
            console .log(person); //{name: "Jame"}
            console .log(person.name); //"Jame";
      </ script >
// 把ECMAScript中的参数想象成局部变量。









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值