作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图理解 JavaScript 中变量和对象的传递,遇到了 this page .
说明JavaScript对象是按值传递的,但值本身是一个引用。尽管我理解该页面上给出的示例中发生的情况,但我仍然对原因感到困惑。谁能解释一下“值(value)本身就是一个引用”是什么意思?
最佳答案
一些语言对函数参数有一个“按引用传递”的概念,这意味着当你调用一个函数并传入一个变量时按引用函数可以修改原始变量以保存一些其他值- 它具有对原始变量的引用。
使用“按值传递”,当您调用函数并传入变量时,函数仅获取值,因此无法更改传入的原始变量。
JS 只有“按值传递”,但是当您将对象作为参数传递时,“值”是对原始对象的引用,这样函数就可以修改、创建或删除该对象的属性,但是函数不能修改原始变量以引用其他对象或值。
例子:
function changeObj(someObj) {
someObj.a = 1000;
someObj.c = "test";
someObj = { "x" : 5 };
console.log(someObj); // { "x" : 5 }
}
var o = { "a" : 1, "b" : 2 };
changeObj(o);
console.log(o); // { "a" : 1000, "b" : 2, "c" : "test" }
我展示的代码创建了一个变量 o
,它引用了一个具有 a
和 b
属性的对象。然后它调用函数 changeObj
并传入 o
。该函数更改了 a
属性的值并创建了一个新的 c
属性 - 该函数正在修改变量 o
引用的同一个对象,因为它有一个对该对象的引用。但是随后该函数将 someObj
分配给一个全新的对象。这根本不会影响o
,因为该函数只引用了o
指向的对象,它没有访问权限o
变量本身。
关于javascript - 'value is a reference' 对 JavaScript 对象意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12030407/
我是一名优秀的程序员,十分优秀!