javascript - 请问JS函数里的默认参数有什么影响?

查看:121
本文介绍了javascript - 请问JS函数里的默认参数有什么影响?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

大手们,
请问为什么会发生这种事

    var i = "123";
    alert(i) //123
    function x(i){
        i = "321"; 
        }
    x(i);
    alert(i)//321

解决方案

第一处中,执行i="321"时,解释器就开始去找i了,由内到外,先去函数参数部分找,一找,找到了,那就把参数的那个i给改掉了

第二处中,执行i="321"时,函数参数部分没找到i,那就继续往外找,在全局找到了一个i,那就把全局的那个i给改掉了

如果一直往外找,连在全局都没找到的话,就会报错抛异常了~

还有,第一处的参数传递行为表现得类似于值传参,也就是说,全局i和参数i是两个不同的变量,在调用函数的时候把全局i拷贝到参数i中,之后对参数i不管怎么操作都跟全局i没关系了


我在上文说值传参,其实是不准确的,但是如果你对js比较陌生就暂时先这么理解着好了,省得搞混了。
js的参数实际上传的是引用,那是因为js中,除了布尔、数值等少量类型外,其他类型的变量保存的都是一个引用而非对象本身,这里的引用可以理解为C/C++中的指针

//js
var a=new String("hi");
var b=function f(){}

相当于

void f(){}
string *a=new string("hi");
void (*b)()=f;

而在js参数传递中,同样表现出指针的行为:

var a=[10];
function func(x){
    x[0]=11;//这一步会修改a
    x=[2,3];//这一步会把x和a就此分离开来
    //此时x是[2,3],a是[11]
}
func(a);

这其实相当于

int a[]={10};
void func(int *x)
{
    x[0]=11;
    x=new int[2];
    x[0]=2,x[1]=3;
}
func(a);

这篇关于javascript - 请问JS函数里的默认参数有什么影响?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆