高级三——函数的参数

来源:互联网 发布:传奇千里传音数据 编辑:程序博客网 时间:2024/06/01 22:43
<script>
           //ECMAScript函数传递的参数可以是0到多个,可以是任意数据类型。没有函数签名的概念,所以函数不能重载。
           functiondoAdd(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>
           functiondoAdd2(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>
           functionaddTen(num){
                num+= 10;
                returnnum;
           }
           varcount = 20;
           varresult = addTen(count);
           varnum = 30;
           varresult2 = addTen(num);//如果未对num进行声明并且赋值,此处将会报错。这里的num与函数里面的形参num无关。
           alert(count);//20。参数是按值传递的,所以传递的是20,而不是变量count。
           alert(result);//30
           alert(num);//30
          alert(result2);//40
     </script>
<script>
          functionsetName(obj){
                obj.name= "Jame";
           }
           varperson = new Object();//person指向的对象在堆内存中只有一个,且是全局对象。
           setName(person);//obj和person引用的是同一个对象。
          alert(person.name);//"Jame"
</script>
<script>
          functionsetName(obj){
                obj.name= "Jame";
                console.log(obj);//{name: "Jame"}
                obj= new Object();//当在函数内部重写obj时,这个变量引用的就是一个局部对象,这个局部对象会在函数执行完毕后立即被销毁。
                obj.name= "Tom";//在函数内部修改了参数不会影响到原始的引用person
                console.log(obj);//{name: "Tom"}
           }
           varperson = new Object();
           setName(person);//(参数是按值传递,而不是按引用传递)多了这句话反而不好理解。
           console.log(person);//{name: "Jame"}
           console.log(person.name);//"Jame";
     </script>
//把ECMAScript中的参数想象成局部变量。









阅读全文
0 0
原创粉丝点击