函数参数的定义以及参数传值传址的区别

1、函数内直接调用全局变量

var a = 1;
function test(){
    a = 100;  // 函数内直接调用全局变量
    console.log(a)
}

我们运行函数,然后再回头来看全局变量的值

test() // 100
a // 100

比较简单,函数内,因为没有var a,所以此处的a是全局变量的重新赋值,最终全局变量a被重新赋值为100了

2、函数通过参数的形式(传值)将全局变量引入函数内

var a = 1;
function test(a){
    a = 100;
    console.log(a)
}

现在,我们给函数一个形参,然后调用的时候将全局变量a以实参传入函数内,我们再次执行函数

test(a) // 100
a // 1

我们发现,当以参数的形式传入a的时候,函数体内不在是对全局变量的修改了,因为当我们给函数传参的时候,相当于定义了一个新的变量a,函数体内a成为了一个新的变量

3、函数通过参数的形式(传址)将全局变量引入函数内

var obj = {num: 0}
function test(obj){
    obj.num++;
    console.log(obj)
}

我们将对象obj以参数形式传入函数内部,再次执行函数,我们看一下

test(obj) // {num: 1}
obj // {num: 1}

全局的obj也同时发生了改变,虽然我们也是通过参数形式,相当于函数体内有一个var obj,但是注意,这里传入的参数为对象形式,是引用类型,传址,会指向和全局变量obj同样的值,所以会同时改变全局变量的值

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值