JavaScript高级程序设计(复制变量值、传递参数)
复制变量值
一个变量向另一个变量复制基本类型值和引用类型值时,是存在不同的。
一个变量向另一个变量复制基本类型的值,会在变量的对象上创建一个新值,然后把该值复制到为新变量分配的位置上。
var num1 = 7;
var num2 = num1;
用图来看如下:


两个值不会相互影响
一个变量向另一个变量赋值引用类型的值,实际上是复制指向这个地址的指针。
var obj1 = new Object();
var obj2 = obj1;
obj1.name = "jack";
alert(obj2.name); //"jack"
具体如图:

两个值会相互影响
传递参数
向参数传递基本类型的值时,被传递的值会被复制给一个局部变量
function add(num){
num =+ 10;
return num;
}
var count = 20;
var sum = add(count);
alert(count); //20
alert(sum); //30
向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映到函数的外部。
function setBook(obj){
obj.name = "JavaScript高级程序设计";
obj = new Object();
obj.name = "HTML基础"
}
var book = new Object();
setBook(book);
alert(book.name); //"JavaScript高级程序设计"
上面可以看出影响到了函数的外部,可为什么不是输出"HTML基础"呢?因为,在局部作用域中修改过的对象会在全局作用域中反映出来是安值传递的。
上面代码中,如果是按引用传递的,那么应该输出"HTML基础"。这说明即使在函数内部修改了参数的值,但原始的引用仍然不变。实际上,当函数内部重写obj时,这个变量的引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即被销毁
function setBook(obj){
obj = new Object();
obj.name = "HTML基础"
}
var book = new Object();
setBook(book);
alert(book.name); //undefined
JavaScript高级程序设计(复制变量值、传递参数)的更多相关文章
- 读书时间《JavaScript高级程序设计》一:基础篇
第一次看了<JavaScript高级程序设计>第二版,那时见到手上的书,第一感觉真是好厚的一本书啊.现在再次回顾一下,看的是<JavaScript高级程序设计>第三版,并记录一 ...
- js-function复制变量值和传递参数
<title>function复制变量值</title></head><body> <script> var a={ num:10 } // ...
- (读书笔记)函数参数浅析-JavaScript高级程序设计(第3版)
ECMAScript函数不介意传递的参数个数,因为在其内部是用一个数组进行表示的.在函数体内可以通过arguments对象来访问这个参数数组,就像我们正常访问数组一样处理. arguments对象只是 ...
- 《Javascript高级程序设计第3版》精华总结
一.JavaScript简介 1.1 javascript简史 1.2 javascript实现 + javascript是一种专为网页交互而设计的一种脚本语言,javascript由三大部分组成 ...
- JavaScript高级程序设计 - 阅读笔记
[本博客为原创:http://www.cnblogs.com/HeavenBin/] 前言: 大致花费了一个星期的时间把这本书认真看了半本,下面是我做的阅读笔记,希望能够让看这本书的人有个大致的参考. ...
- JavaScript高级程序设计学习(三)之变量、作用域和内存问题
这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...
- javascript高级程序设计第三版书摘
在HTML 中使用JavaScript <script>元素 在使用<script>元素嵌入 JavaScript 代码时,只须为<script>指定 type 属 ...
- 《JavaScript高级程序设计》学习笔记(3)——变量、作用域和内存问题
欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第四章内容. 1.函数:通过函数可以封装 ...
- 《JavaScript高级程序设计》
第二章在html中使用Javascript2.1<script>在使用<script>嵌入JS代码时,不要再代码中的任何地方出现"</script>&qu ...
随机推荐
- 如何定位 Node.js 的内存泄漏
基础知识 Node.js 进程的内存管理,都是有 V8 自动处理的,包括内存分配和释放.那么 V8 什么时候会将内存释放呢? 在 V8 内部,会为程序中的所有变量构建一个图,来表示变量间的关联关系,当 ...
- Python爬虫教程-23-数据提取-BeautifulSoup4(一)
Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据,查看文档 https://www.crummy.com/software/BeautifulSoup/bs4/doc. ...
- Nancy使用Razor视图引擎时,提示对C:\Windows\temp 没有权限访问的问题
Nancy下使用Razor视图需要添加DLL文件引用,通过Nuget安装: 发布网站,在IIS上建立站点后,提示错误:对C:\Windows\temp\XXXX 的访问被拒绝(在VS里F5调试的时候没 ...
- 一张图看懂CSS cascade, specific, importance, inheritance
http://www.w3.org/TR/CSS21/cascade.html#inheritance http://www.w3.org/TR/CSS21/cascade.html#cascade ...
- mongodb 3.4分片复制集配置
1:启动三个实例 mongod -f /home/mongodb/db27017/mongodb27017.conf mongod -f /home/mongodb/db27018/mongodb27 ...
- 应用线性代数简介 - 向量,矩阵和最小二乘法 By Stephen Boyd and Lieven Vandenberghe
Introduction to Applied Linear Algebra – Vectors, Matrices, and Least Squares 应用线性代数简介 - 向量,矩阵和最小二乘法 ...
- jquery之---$.each详细
jQuery.each()函数用于遍历指定的对象和数组,并以对象的每个属性(或数组的每个成员)作为上下文来遍历执行指定的函数. 语法 静态函数$.each()的语法如下:$.each( object, ...
- windows10 如何关闭快速关机功能电源选项
点击右下角的电池 -> power and sleep setting -> choose what the power buttons do -> change settings ...
- Windows 10 KMS 手工激活
第一.安装好Win10系统,不需要安装其他激活工具.第二.是删除默认序列号,打开命令提示符(管理员),运行 slmgr.vbs -upk,可提示已卸载了序列号. slmgr /ipk W269N-WF ...
- C++使用BOOST操作文件、目录
开始使用 在BOOST库出现之前,C++对于文件和目录的操作,大都借助于UNIX提供的底层文件和目录接口,从使用角度来看,这些底层的操作不够友好.BOOST中filesystem库是一种可移植的文件系 ...