[Javascript] 函数参数讨论

来源:互联网 发布:拖欠淘宝贷款一年 编辑:程序博客网 时间:2024/05/20 17:27

自己的学习小结,可能会有错误,欢迎指正。


函数参数包括:基础类型变量、数组、函数、对象,函数怎么传递参数的?哪些是传值,哪些是传址?下面说的参数均为局部变量。

*传值特点:你变我不变

*传址特点:你变我也变

1.基础类型变量: 传值

2.数组:可以传值也可以传址

3.函数:传址

4.对象:传值


测试代码如下

1.基础类型变量做参数,传的是变量值,因此你变我不变

<!DOCTYPE html><html><head><script src="/jquery/jquery-1.11.1.min.js"></script><script>$(document).ready(function(){  $("p").click(function(){       testMain();  });});function addFirst(i) {    i++;    return i;}function change(addFirst, a) {    var b = addFirst(a);    return b;}function testMain() {    j = 0;    alert(change(addFirst, j));    alert(j);}</script></head><body><p>如果您点击我,我会消失。</p><p>点击我,我会消失。</p><p>也要点击我哦。</p></body></html>


2..数组

a. 函数名作为参数,传的是地址,因此你变我也变,arr[0]从1变为‘Aug’

<!DOCTYPE html><html><head><script src="/jquery/jquery-1.11.1.min.js"></script><script>$(document).ready(function(){  $("p").click(function(){       testMain();  });});function change(arr) {    arr[0] = 'Aug';}function testMain() {    var arr = [1,2,3,4,5];    change(arr);    alert(arr[0]);}</script></head><body><p>如果您点击我,我会消失。</p><p>点击我,我会消失。</p><p>也要点击我哦。</p></body></html>

b. 具体某个数组值作为参数,传的是变量值,因此你变我不变

<!DOCTYPE html><html><head><script src="/jquery/jquery-1.11.1.min.js"></script><script>$(document).ready(function(){  $("p").click(function(){       testMain();  });});function change(a) {    a = 'Aug';}function testMain() {    var arr = [1,2,3,4,5];    change(arr[0]);    alert(arr[0]);}</script></head><body><p>如果您点击我,我会消失。</p><p>点击我,我会消失。</p><p>也要点击我哦。</p></body></html>

c. 如果希望一次性传递数组的多个值,且不改变原来数组的值,可采用先arr.join(',')转换成字符串如’1,2,3‘作为参数,在函数里str.split(','),

<!DOCTYPE html><html><head><script src="/jquery/jquery-1.11.1.min.js"></script><script>$(document).ready(function(){  $("p").click(function(){       testMain();  });});function addFirst(i) {    i++;    return i;}function change(addFirst, str) {    var b = addFirst(str.split(',')[0]);    return b;}function testMain() {    var arr = [1,2,3];change(addFirst, arr.join(','));    alert(arr.join(','));    }</script></head><body><p>如果您点击我,我会消失。</p><p>点击我,我会消失。</p><p>也要点击我哦。</p></body></html>


3.函数作为参数,参数的是函数名,是传址

<!DOCTYPE html><html><head><script src="/jquery/jquery-1.11.1.min.js"></script><script>$(document).ready(function(){  $("p").click(function(){       testMain();  });});function addFirst(i) {    i++;    return i;}function change(addFirst, a) {    var b = addFirst(a);    return b;}function testMain() {    var arr = [1,2,3,4,5];    alert(change(addFirst, 1));}</script></head><body><p>如果您点击我,我会消失。</p><p>点击我,我会消失。</p><p>也要点击我哦。</p></body></html>




4.函数参数为对象,传的是地址,因此你变我也变:一开始stu赋值为‘Mike’, 调用‘rename(stu,‘Luck’)’后,stu名称变为'Luke'

<!DOCTYPE html><html><head><script src="/jquery/jquery-1.11.1.min.js"></script><script>$(document).ready(function(){  $("p").click(function(){       testMain();  });});function Stu(name) {    this.name = name;}Stu.prototype.setName = function(name) {    this.name = name;}Stu.prototype.getName = function() {    return this.name; }function rename(stu, name) {   stu.setName(name);}function testMain() {    var stu = new Stu('Milke');    rename(stu, 'Luck')    alert(stu.getName());}</script></head><body><p>如果您点击我,我会消失。</p><p>点击我,我会消失。</p><p>也要点击我哦。</p></body></html>




0 0