美文网首页
传递参数

传递参数

作者: 书中有凉气 | 来源:发表于2017-03-28 23:01 被阅读0次

js中所有的函数都是按值传递的。
在向参数传递基本类型时,被传递的值会被复制给一个局部变量。

在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。
    function addTen(num){
        num += 10;
        return num;
    }
    var count = 20;
    var result = addTen(count);
    alert(count);       //20,没有变化
    alert(result);      //30

count传递给参数num,函数内部num做了修改,但是没有反映到count上。

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

这个例子很容易让人觉得,引用类型做为函数参数传递是按引用传递的,因为局部的修改:obj.name = "Jack",反映在了全局的作用域上:person.name,事实上并不是如此。

事实上:我们创建了一个对象,并把它保存在person变量中,然后把person当做参数传递到setName()函数中复制给了obj,在这个函数内部obj和person引用的是同一个对象。

再看一个例子:

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

这个例子中在setName()函数中,为obj重新定义了一个对象,另一行代码为该对象定义了一个带有不同值的name属性。如果person传递给函数setName()之后是按引用传递的,那么对obj.name的修改就会反映到person.name上,事实上person.name依然是Jack。

当在函数内部重写obj时,这个变量的引用就是一个局部变量了,这个局部变量在函数执行完毕后立即销毁。

相关文章

网友评论

      本文标题:传递参数

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