没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论



























ES6变量声明与赋值:值传递、浅拷贝与深拷贝详解变量声明与赋值:值传递、浅拷贝与深拷贝详解
变量声明与赋值
ES6 为我们引入了 let 与 const 两种新的变量声明关键字,同时也引入了块作用域;本文首先介绍 ES6 中常用的三种变量声明
方式,然后讨论了 JavaScript 按值传递的特性以及多种的赋值方式,最后介绍了复合类型拷贝的技巧。
变量声明
在 JavaScript 中,基本的变量声明可以用 var 方式;JavaScript 允许省略 var,直接对未声明的变量赋值。也就是说,var a =
1 与 a = 1,这两条语句的效果相同。但是由于这样的做法很容易不知不觉地创建全局变量(尤其是在函数内部),所以建议
总是使用 var 命令声明变量。在 ES6 中,对于变量声明的方式进行了扩展,引入了 let 与 const。var 与 let 两个关键字创建变
量的区别在于, var 声明的变量作用域是最近的函数块;而 let 声明的变量作用域是最近的闭合块,往往会小于函数块。另一
方面,以 let 关键字创建的变量虽然同样被提升到作用域头部,但是并不能在实际声明前使用;如果强行使用则会抛出
ReferenceError 异常。
var
var 是 JavaScript 中基础的变量声明方式之一,其基本语法为:
ECMAScript 6 以前我们在 JavaScript 中并没有其他的变量声明方式,以 var 声明的变量作用于函数作用域中,如果没有相应
的闭合函数作用域,那么该变量会被当做默认的全局变量进行处理。
像如上这种调用方式会抛出异常: ReferenceError: hello is not defined,因为 hello 变量只能作用于 sayHello 函数中,不过如
果按照如下先声明全局变量方式再使用时,其就能够正常调用:
let
在 ECMAScript 6 中我们可以使用 let 关键字进行变量声明:
let 关键字声明的变量是属于块作用域,也就是包含在 {} 之内的作用于。使用 let 关键字的优势在于能够降低偶然的错误的概
率,因为其保证了每个变量只能在最小的作用域内进行访问。
上述代码同样会抛出 ReferenceError: hello is not defined 异常,因为 hello 只能够在闭合的块作用域中进行访问,我们可以进
行如下修改:
我们可以利用这种块级作用域的特性来避免闭包中因为变量保留而导致的问题,譬如如下两种异步代码,使用 var 时每次循环
中使用的都是相同变量;而使用 let 声明的 i 则会在每次循环时进行不同的绑定,即每次循环中闭包捕获的都是不同的 i 实
例:
const
const 关键字一般用于常量声明,用 const 关键字声明的常量需要在声明时进行初始化并且不可以再进行修改,并且 const 关
键字声明的常量被限制于块级作用域中进行访问。
JavaScript 中 const 关键字的表现于 C 中存在着一定差异,譬如下述使用方式在 JavaScript 中就是正确的,而在 C 中则抛出
异常:
从上述对比我们也可以看出,JavaScript 中 const 限制的并非值不可变性;而是创建了不可变的绑定,即对于某个值的只读引
用,并且禁止了对于该引用的重赋值,即如下的代码会触发错误:
我们可以参考如下图片理解这种机制,每个变量标识符都会关联某个存放变量实际值的物理地址;所谓只读的变量即是该变量
标识符不可以被重新赋值,而该变量指向的值还是可变的。
JavaScript 中存在着所谓的原始类型与复合类型,使用 const 声明的原始类型是值不可变的:
而如果我们希望将某个对象同样变成不可变类型,则需要使用 Object.freeze();不过该方法仅对于键值对的 Object 起作用,
而无法作用于 Date、Map 与 Set 等类型:
即使是 Object.freeze() 也只能防止顶层属性被修改,而无法限制对于嵌套属性的修改,这一点我们会在下文的浅拷贝与深拷
贝部分继续讨论。
变量赋值
按值传递
JavaScript 中永远是按值传递(pass-by-value),只不过当我们传递的是某个对象的引用时,这里的值指的是对象的引用。
按值传递中函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。而按引用传递(pass-by-reference)
时,函数的形参接收实参的隐式引用,而不再是副本。这意味着函数形参的值如果被修改,实参也会被修改。同时两者指向相
同的值。我们首先看下 C 中按值传递与引用传递的区别:
资源评论


weixin_38536397
- 粉丝: 7
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- -单片机数字电子钟的方案设计书与研究-.doc
- 企业网站建设协议范本.doc
- 如何以就业为导向探索中职计算机专业的建设.doc
- 大学生职业生涯规划方案书(计算机专业).doc
- ACCESS由家庭物品管理到学成生绩管理的转换分析研究.doc
- 我国农业物联网发展现状存在问题和对策.docx
- 浅论互联网经济下我国电商网络零售演进及竞争发展态势.docx
- 刍议计算机网络应用安全的影响因素.docx
- 大数据的未来.docx
- 网络工程师综合网络配置练习手册汇编.doc
- 基于SKYEYE的嵌入式Linux系统研究设计.doc
- AutoCAD工程师.doc
- 基于大数据时代背景下的档案管理.docx
- Z建设工程项目管理施工成本控制.doc
- ppt模板:简约风全球化信息网络通用PPT模版.pptx
- 飞天-从互联网行业的视角看空管技术行业.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
