美文网首页
js 传递参数

js 传递参数

作者: xiaowenSpring | 来源:发表于2017-08-30 18:36 被阅读0次

    ECMAScript中所有函数的参数都是按值传递的。

    把函数外部的值复制给函数内部的参数,和把值从一个变量复制到另一个变量是一样的。

    1、在向函数传递基本类型的时候,被传递的值会被赋值给一个局部变量。

    function addTen(num){
    num += 10;
    return num;
    }
    var count = 20;
    var result = addTen(count);
    alert(count); //20
    alert(result); //30

    2、在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映到函数的外部.

    demo1

    function setName(obj) {
    obj.name = "Nicholas";
    }
    var person = new Object();
    setName(person);
    alert(person.name ); //"Nicholas"

    demo2

    function setName(obj) {
    obj.name = "Nicholas";
    obj = new Object();
    obj.name = "Grey";
    }
    var person = new Object();
    setName(person);
    alert(person.name ); //"Nicholas"

    demo中person.name的值并不是"Gery",可以看出传递引用类型的时候,并不是按引用传递,而是按值传递。

    它传递的的确是引用,但实际上他应用的策略却是 call by sharing。通俗的说就是,它并不是把引用直接传递进去,而是把引用的拷贝传递进去存储在函数内部的AO对象里。

    更简单点理解,就是在函数里面创建了一个局部变量obj, obj = person(传入的参数), 因此obj是一个局部变量。(适用于基本类型和引用类型)。

    关于按值传递和按引用传递的更详细的解释可以参考下面这边文章,讲的比较明白https://www.zhihu.com/question/27114726/answer/35481766

    相关文章

      网友评论

          本文标题:js 传递参数

          本文链接:https://www.haomeiwen.com/subject/qaugdxtx.html