当前位置: 首页 > Web前端 > HTML

js函数,参数传递,引用类型和基本类型

时间:2023-04-02 20:23:56 HTML

函数参数1.js函数不介意传入多少个参数,也不关心传入什么类型的参数。2.arguments对象:类数组arguments对象的长度由传入的参数个数决定,而不是定义函数时参数(命名参数)的个数。未传递值的命名参数将自动赋予未定义值。使用原始类型和引用类型的var运算符定义的变量将成为范围内的局部变量。也就是说var是用来在函数中定义一个变量,这个变量会在函数退出后销毁。原始类型:存储在栈中的简单数据段,即它们的值直接存储在变量被访问的地方。引用类型:堆中存储的对象,即变量中存储的值是指向堆中对象的指针。传递参数所有函数参数都是按值传递的。将基本类型的值传递给参数时,传递的值将复制到局部变量,即命名参数。只是把变量中的值传给参数,然后参数和变量就不会互相影响了。当将引用类型的值传递给参数时,该值在内存中的地址将被复制到一个局部变量中,因此这个局部变量的变化会反映到函数外部。object变量里面的值就是对象在堆内存中的内存地址,大家要时刻牢记!对于数组和对象等,将对象(数组)的变量的值传递给函数参数,这个变量存储的是对象(数组)的地址。当函数改变了这个地址指向的对象(数组)的内容时,也同时改变了函数外部变量指向的对象(数组)的内容;当函数改变变量的地址时,实际上就失去了与函数外部变量的联系,变成了完全不同的对象,不会引起函数外部对象的改变。我们来看书上的两个经典例子:functionsetName(obj){obj.name="xiaoxiaozi";}varperson=newObject();设置名称(人);警报(人名);//returnxiaoxiaoziiscalling当函数setName()被调用时,person被复制到obj中。所以在函数内部obj和person引用同一个对象,或者引用同一个对象。所以在给obj引用的对象加上name属性的时候,person引用的对象也有name属性,因为obj和person虽然不同,但是两者引用的对象是一样的。functionsetName(obj){obj.name="小小子";对象=新对象();obj.name="admin";}varperson=newObject();设置名称(人);警报(人名);//结果还是小小子调用setName()函数时,obj和person指的是同一个对象,所以firstname属性赋值会影响person。但是当obj被重新定义时,它所引用的对象已经和person不同了,所以后面设置的name属性不会对person所引用的对象产生任何影响。