关于JS变量和作用域详解


Posted in Javascript onJuly 28, 2016

ECMAScript 变量:

1.基本类型值(简单数据段)

2.引用类型值(可能由过个值构成的对象) → 保存在内存中的对象

------

动态属性: 只能给引用型值动态添加新属性,以便将来使用。

------

复制变量值 :

基本类型值的复制 → 在变量对象上创建一个新值 → 复制给新变量(互不影响)

引用类型值的复制 → 将存储在变量对象中的值复制到新变量分配空间中(复制的是一个指针,指向同一个对象,相互影响)

------

传递参数:

ECMAScript中所有函数的参数都是按值传递 。

(函数外部的值复制给函数内部的参数。

 → 可以把ECMA函数的参数想象成局部变量。)

原因解释:

说法一:

函数参数是一种局部变量,在外部值传递给函数参数,内部外部互不影,引用传递复制的是地址,所以他内务外部相互有影响。

说法二:对象角度(参数是一个对象 obj)

------

对象按值传递 → 参数对象和外部对象引用同一个对象 → 外部对象指向的对象在堆内存中只有一个,且是全局变量。

不要错认为是在局部作用在修改的对象在全局作用域(外部)反映出来的结果 → 函数内部的局部变量在函数执行完会立即销毁。

------

执行环境(有时候也简称“环境”)及作用域

执行环境定义了白?莼蚝??腥ǚ梦势渌??菥龆?怂?歉髯缘男形 → 每个执行环境都有一个与之关联的变量对象 → 环境中定义的所有变量和函数都保存在这个对象。

------

每个函数都有自己的执行环境 → 当执行流进入一个函数时 → 函数环境会被推入一个环境栈中 → 在函数执行后将其弹出 → 把控制权返回给之前的执行环境
 
代码在一个环境执行中时,会创建变量对象的一个作用域链(scope chain)

作用域链用途:保证对执行环境有权访问的所有变量和函数的有序访问。

作用域链的前端,始终都是当前执行的代码所在环境的变量对象
------

内部环境可以通过作用域链所有的外部环境,但是外部环境不能访问内部环境(环境的联系是线性的,有次序的 → 向上搜索作用域链以查询变量和函数名)

函数参数也被当做变量来对待

------

延长作用域链:

有些语句可以在作用域的前端链临时增加一个变量(变量在代码执行后移除)

1.try-catch语句的catch块

2.with语句
------

Javas没有块级作用域

这里可以再简单区分一下块级作用域和函数作用域

以上这篇关于JS变量和作用域详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
pjblog修改技巧汇总
Mar 12 Javascript
JS写的数字拼图小游戏代码[学习参考]
Oct 29 Javascript
IE6图片加载的一个BUG解决方法
Jul 13 Javascript
js限制textarea每行输入字符串长度的代码
Oct 31 Javascript
Javascript模块化编程(一)模块的写法最佳实践
Jan 17 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
Jun 24 Javascript
jQuery实现转动随机数抽奖效果的方法
May 21 Javascript
javascript实现状态栏中文字动态显示的方法
Oct 20 Javascript
VUEJS实战之利用laypage插件实现分页(3)
Jun 13 Javascript
详解angular中的作用域及继承
May 31 Javascript
vue el-tree 默认展开第一个节点的实现代码
May 15 Javascript
JS pushlet XMLAdapter适配器用法案例解析
Oct 16 Javascript
jquery轮播的实现方式 附完整实例
Jul 28 #Javascript
AngularJS入门教程中SQL实例详解
Jul 27 #Javascript
AngularJS入门教程之表格实例详解
Jul 27 #Javascript
基于jQuery实现仿微博发布框字数提示
Jul 27 #Javascript
AngularJS入门教程之Select(选择框)详解
Jul 27 #Javascript
关于JS中的方法是否加括号的问题
Jul 27 #Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
Jul 27 #Javascript
You might like
PHPLog php 程序调试追踪工具
2009/09/09 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
简单通用的JS滑动门代码
2008/12/19 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
2014/12/29 Javascript
javascript发送短信验证码实现代码
2015/11/12 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
JS快速实现移动端拼图游戏
2016/09/05 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
template.js前端模板引擎使用详解
2017/10/10 Javascript
js实现Tab选项卡切换效果
2020/07/17 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
2018/11/13 Javascript
JS实现小星星特效
2019/12/24 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
python每次处理固定个数的字符的方法总结
2013/01/29 Python
Python中的pprint折腾记
2015/01/21 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
存储过程和函数的区别
2013/05/28 面试题
协商一致解除劳动合同协议书
2014/09/14 职场文书
户籍证明格式
2014/09/15 职场文书
2014年标准化工作总结
2014/12/17 职场文书
沈阳故宫导游词
2015/01/31 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
教师工作表现自我评价
2015/03/05 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
介绍信应该怎么开?
2019/04/03 职场文书