[Javascript] 函数参数讨论

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


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

*传值特点:你变我不变

*传址特点:你变我也变

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>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值