JavaScript高级程序设计(复制变量值传递参数)

Posted 妖色调

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript高级程序设计(复制变量值传递参数)相关的知识,希望对你有一定的参考价值。

复制变量值

一个变量向另一个变量复制基本类型值和引用类型值时,是存在不同的。

一个变量向另一个变量复制基本类型的值,会在变量的对象上创建一个新值,然后把该值复制到为新变量分配的位置上。
var num1 = 7;
var num2 = num1;

用图来看如下:

两个值不会相互影响

一个变量向另一个变量赋值引用类型的值,实际上是复制指向这个地址的指针。
var obj1 = new Object();
var obj2 = obj1;
obj1.name = "jack";
alert(obj2.name);   //"jack"

具体如图:

两个值会相互影响

传递参数

向参数传递基本类型的值时,被传递的值会被复制给一个局部变量
function add(num){
    num =+ 10;
    return num;
}
var count = 20;
var sum = add(count);
alert(count);   //20        
alert(sum);     //30
向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映到函数的外部。
function setBook(obj){
    obj.name = "javascript高级程序设计";
    obj = new Object();
    obj.name = "html基础"
}
var book = new Object();
setBook(book);
alert(book.name);   //"JavaScript高级程序设计"

上面可以看出影响到了函数的外部,可为什么不是输出"HTML基础"呢?因为,在局部作用域中修改过的对象会在全局作用域中反映出来是安值传递的。

上面代码中,如果是按引用传递的,那么应该输出"HTML基础"。这说明即使在函数内部修改了参数的值,但原始的引用仍然不变。实际上,当函数内部重写obj时,这个变量的引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即被销毁

function setBook(obj){
    obj = new Object();
    obj.name = "HTML基础"
}
var book = new Object();
setBook(book);
alert(book.name);   //undefined

以上是关于JavaScript高级程序设计(复制变量值传递参数)的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中的不同html页面之间传递变量值

如何在传递变量值的 JavaScript 中指定内联关键帧?

JavaScript,当变量作为参数传递时更改函数内部的变量值[重复]

Django:如何将python变量值传递给javascript文件?

如何从 JavaScript 中的变量值创建对象属性? [复制]

将变量值从 JS 传递给 PHP