javascript - js函数与对象都是按引用访问的吗?

查看:118
本文介绍了javascript - js函数与对象都是按引用访问的吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

var obj = {name: 'xixi'};
var anotherObj = obj;
console.log(obj.name);               //xixi
console.log(anotherObj.name);        //xixi

anotherObj.name = 'haha';
console.log(obj.name);               //haha
console.log(anotherObj.name);        //haha

var fun = function(){return 'xixi';};
var anotherFun = fun;
console.log(fun());                          //xixi
console.log(anotherFun());                   //xixi

anotherFun = function(){return 'haha';};
console.log(fun());                          //xixi
console.log(anotherFun());                   //haha

同样是复制一个值,为什么对象改变一个值,另一个也会随之改变;而函数则有不同的表现。哪里出现问题了?

上面的例子可能不恰当,但我想了解的重点是:函数和对象一样,它们是按引用访问的。你们能举一个反映这一特性的函数的例子吗?

解决方案

函数是一种特殊对象,所以它们表现应该是一致的。

之所以你得到了不同的结果,是因为你举的例子不合适!你对对象和函数做了两种不同类型的操作:

  • 例一:改变了对象的属性,两个变量指向的对象都没有变。

  • 例二:改变了第二个变量指向的函数(函数对象)

所以两个例子没有可比性。

对象的例子你已经有了,函数的例子我重新给你举一个,如下:

var fun = function(){return 'xixi';}; 
fun.a = 123;
var anotherFun = fun; 

console.log(fun.a); // 123
console.log(anotherFun.a); // 123

anotherFun.a = 456;

console.log(fun.a); // 456
console.log(anotherFun.a); // 456

这样一来,结果就一致了。

多说一句:函数是一种特殊对象,也可以叫做函数对象。它的特殊性在于可调用

另外,注意区分变量、对象和属性这几个概念。

这篇关于javascript - js函数与对象都是按引用访问的吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆