js中函数参数基本类型和引用类型的区别
2024-10-12 07:59:52
高级程序设计中说明,所有函数的参数都是按值传递的。
基本类型
向参数传递基本类型的值时,被传递的值会被复制给对应的命名参数
function addTen(num){ num=+10; return num; } var count=20; var result=addTen(count); alert(count);
在函数内部,num的值被加上10,但不影响外部count变量的值
引用类型
在向参数传递引用类型的值时,把这个值在内存中的地址复制给对应的局部变量,如果这个局部变量没有重新赋值,那它在函数内部的变化将反应到外部
function setName(obj){ obj.name="nichos"; } var person={ name:"richas" }; setName(person); alert(person.name);//nichos
如果被重新赋值给新的对象,这之后变化将不影响外部的变化。
function setName(obj){ obj.name="nichos"; obj=new Object(); obj.name="new name"; } var person={ name:"richas" }; setName(person); alert(person.name);//nichos
下面再转个网友的个例子
var ftn1 = function(){ console.log("test:ftn1"); }; var ftn2 = function(){ console.log("test:ftn2"); }; function ftn(f){ f(); f = ftn2; } ftn(ftn1);// 运行结果:test:ftn1 console.log("====================华丽的分割线======================"); ftn1();// 运行结果:test:ftn1
为什么不是test:ftn2,那是因为参数f被赋值给f2对象的地址后,跟外面的f1已经没关系了,所以结果还是f1
var ftn1 = function(){ console.log("test:ftn1"); }; var ftn2 = function(){ console.log("test:ftn2"); }; function ftn(f){ f();//test:ftn1 f = ftn2; f();//test:ftn2 } ftn(ftn1);// 运行结果:test:ftn1 console.log("====================华丽的分割线======================"); ftn1();// 运行结果:test:ftn1
最新文章
- Yii2.0 对的一些简单的操作
- nginx---------------nginx的nginx_status配置
- jq
- UVA11324 强连通+dp记忆化搜索
- dancing link
- Linux远程文件传输
- JavaScript之表格过滤器
- Spark Streaming 原理剖析
- Mtom Encoding in WCF
- 无法为数据库 XXX 中的对象XXX 分配空间,因为 'PRIMARY' 文件组已满。请删除不需要的文件、删除文件组中的对象、将其他文件添加到文件组或为文件组中的现有文件启用自动增长,以便增加可用磁盘空间。
- Docker自学资源
- 开源html5_kiwijs_helloworld
- Spring 下 MyBatis 的基本使用
- Gitlab的安装
- 大数据:Hive - ORC 文件存储格式
- 【BZOJ4553】【TJOI2016】【HEOI2016】序列
- [AX]AX2012 R2 采购订单的“Request change”
- DES对 json 、http参数加密解密算法
- 【转】提高你开发效率的十五个Visual Studio 2010使用技巧
- MFC开发小技巧总结