js的实参是按值传递还是按引用传递
1.如果是基本类型,则是按值传递
var str = 'one';
function f(string) {
string = 'two';
}
f(str);
console.log(str); // 仍为one, 未受string = 'two'赋值所影响
2.如果是引用类型,则是按共享传递 call by sharing,并不是按引用传递,也不是按值传递。叫按对象传递、按对象共享传递.最早由Barbara Liskov. 在1974年的GLU语言中提出。该求值策略被用于Python、Java、Ruby、JS等多种语言。
var obj = {};
function f(o) {
o.name = 'li';
}
f(obj);
console.log(obj.name); //li 被修改了
var obj = {};
function f(o) {
// o = 'li';
o = [];
}
f(obj);
console.log(obj); //{} 没有修改
重点:调用函数传参时,函数接受对象实参引用的副本(既不是按值传递的对象副本,也不是按引用传递的隐式引用)。 它和按引用传递的不同在于:在共享传递中对函数形参的赋值,不会影响实参的值。如下面例子中,不可以通过修改形参o的值,来修改obj的值。也就是说不可以改变引用类型的指针,只可以改变这个对象的属性。
通常基本类型是不可变的,例如:number string boolean等
var str = "abc";
str[0] // a
str[0] = 'b'
str //abc
注意:很多时候我们会str = "gg" 通常会误解这不是会变吗,但是变得是str这个变量,被重新赋值了,而不是 'abc' 变化了。
js的实参是按值传递还是按引用传递的更多相关文章
- JS是按值传递还是按引用传递
按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本.修改形参的值并不会影响实参. 按引用传递(call by reference)时,函数的形参接收实参的隐式 ...
- JS基础类型和对象,分别是按值传递还是按引用传递?
在分析这个问题之前,我们需了解什么是按值传递(call by value),什么是按引用传递(call by reference).在计算机科学里,这个部分叫求值策略(Evaluation Strat ...
- js按值传递和按引用传递
摘要:js的数据类型有种划分方式为 原始数据类型和 引用数据类型. 原始数据类型 存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置.栈区包括了 变量的标识符和变量的值. ...
- JS是按值传递还是按引用传递?【转载】
最近遇到个有趣的问题:“JS中的值是按值传递,还是按引用传递呢?” 在分析这个问题之前,我们需了解什么是按值传递(call by value),什么是按引用传递(call by reference). ...
- Java参数按值传递?按引用传递
有时候在想,java在调用方法时候究竟是按值传递还是按引用传递,之前有人说是基本数据类型按值传递,引用类型按引用传递.一时间,似乎都有道理. 笔者在此不追究字眼上的辨别识字能力,把自己对这个问题的理解 ...
- JavaScript中函数参数的按值传递与按引用传递(即按地址传递)
首先声明一句:JavaScript中所有函数的参数都是按值传递的!不存在按引用传递! 在讲传递参数之前我们先来讲一下指针. 学过C指针的应该都知道,指针变量中保存的是一个地址,程序可以根据所保存的地址 ...
- PHP中对象是按值传递还是按引用传递?
1.首先,什么是按值传递和按引用传递? 按值传递就是仅仅把值传递过去,相当于传递的是值的拷贝,而按引用传递传递的是内存的地址. 在 PHP5 中,如果按引用传递,就是将 zval 的地址赋给另一个变量 ...
- Java的按值传递和按引用传递解说
在网上看到的一个帖子解释Java的按值传递和按引用传递,感觉挺全面,就转过来,以供以后学习参考: 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递.示例如下: public clas ...
- 编程细节 —— 按值传递、按引用传递(final、const)
System.out,out 是 System 类内定义的静态 final PrinterStream 变量: public final class System { ... public final ...
随机推荐
- android service 如何弹出dialog
在service中弹出toast,需要使用handler, handler.post(new Runnable() { @Override public void run() { Toast.make ...
- ACM The Famous Clock
The Famous Clock 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 Mr. B, Mr. G and Mr. M are now in Warsaw, ...
- ACM: 畅通工程-并查集-解题报告
畅通工程 Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 某省调查城镇交通状况 ...
- Code[VS] 2152 滑雪题解
Code[VS] 2152 滑雪题解 题目描述 Description trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形.为了得到更快的速度,滑行 ...
- Codeforces Round #203 (Div. 2)
非常幸运..第三题,有个地方没想清楚,枚举一下就行了..x to n,这个x没考虑好,跪了...傻傻的lock了代码,通过hack进了DIV1,5-2 . 第一次进入DIV1,记录一下. 不知不觉,已 ...
- 【JAVA】Spring 数据源配置整理
在Spring中,不但可以通过JNDI获取应用服务器的数据源,也可以直接在Spring容器中配置数据源,此外,还可以通过代码的方式创建一个数据源,以便进行无依赖的单元测试. 配置数据源 ...
- js的小效果-图片放大镜效果
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- IOS 蓝牙相关-连接外设的代码实现(2)
我们具体说明一下中心模式的应用场景.主设备(手机去扫描连接外设,发现外设服务和属性,操作服务和属性的应用.一般来说,外设(蓝牙设备,比如智能手环之类的东西), 会由硬件工程师开发好,并定义好设备提供的 ...
- AVD模拟器运行异常
The connection to adb is down, and a severe error has occured. (1)现将eclipse关闭 (2)打开命令行(cmd),输入:cd + ...
- MYSQL加锁的测验
存储引擎 支持的锁定级别 myisam 表级别 memory 表级别 inndb 行级别 bdb: 页级别 lock锁定类型 锁定方式 ...