我们发明与 C++ 不合,根据膳绫擎代码 ① 可知 JavaScript 中并没有传递一个引用,而是拷贝了一个新的变量,即值传递。根据 ② 可知拷贝的┞封个变量是一个可以拜访到对象属性的“引用”(与传统的 C++ 的引用不合,下文中提到的 JavaScript 的引用都是这种特其余引用)。这里须要总结一个绕口的结论:Javascript 中均是值传递,对象在传递的过程中是拷贝了一份新的引用。
畏敲?解这个比较拗口的结论,让我们来看一段代码:
- var obj = {
- data: {}
- };
- // data 指向 obj.data
- var data = obj.data;
- console.log(data === obj.data); // true-->data所操作的就是obj.data
- data.name = 'Alan';
- data.test = function () {
- console.log('hi')
- };
- // 经由过程data可以直接修改到data的值
- console.log(obj) // { data: { name: 'Alan', test: [Function] } }
- data = {
- name: 'Bob',
- add: function (a, b) {
- return a + b;
- }
- };
- // data是一个引用,直接赋值给它,只是让这个变量等于别的一个引用,并不会修改到obj本身
- console.log(data); // { name: 'Bob', add: [Function] }
- console.log(obj); // { data: { name: 'Alan', test: [Function] } }
- obj.data = {
- name: 'Bob',
- add: function (a, b) {
- return a + b;
- }
- };
- // 而经由过程obj.data才能真正修改到data本身
- console.log(obj); // { data: { name: 'Bob', add: [Function] } }
经由过程这个例子我们可以看到,data 固然像一个引用一样指向了 obj.data,并且经由过程 data 可以拜访到 obj.data 上的属性。然则因为 JavaScript 值传递的特点直接修改 data = http://developer.51cto.com/art/201704/xxx 并不会使得 obj.data = xxx。
推荐阅读
移动互联网人口红利逐渐消退 华为Hi-Star晨星计划一触即发
【51CTO.com原创稿件】 据懂得,在2016岁尾,我国移动智能终端范围冲破13.7亿台,跟着人口红利减退,充分盘活、经营现有流量便成为了各行各业全新的机会与挑衅。经由过程近几年互联网手机>>>详细阅读
地址:http://www.17bianji.com/lsqh/34702.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示