JavaScript中参数之“共享传递”、“按值传递”、“按引用传递”
来源:互联网 发布:麦课在线网络通识学院 编辑:程序博客网 时间:2024/06/03 11:57
定义
在《JavaScript高级程序设计》第三版4.1.3,讲到传递参数:
ECMAScript中所有函数的参数都是按值传递的。
什么是按值传递呢?
也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。
按值传递
在像参数传递基本类型的值时,被传递的值会被复制给一个局部变量(即命名参数)
var value = 1;function foo(v) { v = 2; console.log(v); //2}foo(value);console.log(value) // 1
很好理解,当传递value到函数foo中,相当于拷贝了一份value,假设拷贝的这份叫_value,函数中修改的都是_value的值,而不会影响原来的value值。
引用传递
在像参数传递引用类型的值时,会把这个值得内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。
(即按引用传递,就是传递对象的引用,函数内部对参数的任何改变都会影响该对象的值,因为两者引用的是同一个对象。)
var obj = { value: 1};function foo(o) { o.value = 2; console.log(o.value); //2}foo(obj);console.log(obj.value) // 2
看,这就是引用传递,o的变化反映到了obj这个对象上
共享传递
我的理解是,参数是引用类型的值,并直接把这个参数进行赋值操作,这样就实现了共享传递,这个改变不会反应到函数外部。
var obj = { value: 1};function foo(o) { o = 2; console.log(o); //2}foo(obj);console.log(obj.value) // 1
var obj = { value: 1};function foo(o) { o = { value:3 };}foo(obj);console.log(obj.value) // 1
看,这就是共享传递,改变引用参数的值不会影响到外部。
传值还是传引用或共享
function changeStuff(num, obj1, obj2){ num = num * 10; obj1.item = "changed"; obj2 = {item: "changed"};}var num = 10;var obj1 = {item: "unchanged"};var obj2 = {item: "unchanged"};changeStuff(num, obj1, obj2);console.log(num); // 10console.log(obj1.item); // changedconsole.log(obj2.item); // unchanged
阅读全文
0 0
- JavaScript中参数之“共享传递”、“按值传递”、“按引用传递”
- call by sharing——JavaScript中“共享传递”、“按值传递”、“按引用传递”
- JAVA中参数传递(按值传递和引用传递)
- java方法参数传递方式--按值传递、引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- javascript中,函数参数中的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- Java:理解Java中函数参数传递的【按值传递】和【按引用传递】
- 关于JAVA中参数传递问题的总结(按值传递和引用传递)
- 详解java中给方法传递参数的两种方式:按值传递,引用传递
- JAVA中参数传递问题的总结(按值传递和引用传递)
- Java中参数传递是值传递,还是引用传递
- GSMS软件系统ISO文件刻录教程
- Python浅拷贝与深拷贝
- java常用计算公式
- 计算机与操作系统基础-操作系统介绍 & 网络基础
- 性能优化
- JavaScript中参数之“共享传递”、“按值传递”、“按引用传递”
- 安全常用工具整理
- PAT_1061. Dating
- GSMS软件系统华为应急通讯完美版安装教程
- 自定义框架之JDBC的简要封装
- 追加一个class和减少一个class
- BZOJ1013: [JSOI2008]球形空间产生器sphere
- linux shell 中各种符号的含义
- 导入easyUI文件详解