关于JS变量和作用域详解


Posted in Javascript onJuly 28, 2016

ECMAScript 变量:

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

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

------

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

------

复制变量值 :

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

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

------

传递参数:

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

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

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

原因解释:

说法一:

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

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

------

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

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

------

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

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

------

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

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

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

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

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

------

延长作用域链:

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

1.try-catch语句的catch块

2.with语句
------

Javas没有块级作用域

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

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

Javascript 相关文章推荐
js 全兼容可高亮二级缓冲折叠菜单
Jun 04 Javascript
关于捕获用户何时点击window.onbeforeunload的取消事件
Mar 06 Javascript
使图片旋转的3种解决方案
Nov 21 Javascript
ECMAScript6块级作用域及新变量声明(let)
Jun 12 Javascript
jQuery表格行上移下移和置顶的实现方法
Oct 08 Javascript
实现高性能JavaScript之执行与加载
Jan 30 Javascript
利用JavaScript阻止表单提交的两种方法
Aug 11 Javascript
javascript 实现动态侧边栏实例详解
Nov 11 Javascript
浅谈React Native 中组件的生命周期
Sep 08 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
Dec 06 Javascript
微信小程序缓存过期时间的使用详情
May 12 Javascript
jQuery实现简单飞机大战
Jul 05 jQuery
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
PHP判断指定时间段的2个方法
2014/03/14 PHP
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
php获取mysql字段名称和其它信息的例子
2014/04/14 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
JS的replace方法介绍
2012/10/20 Javascript
JavaScript中的比较操作符>、=、
2014/12/31 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
2017/03/21 jQuery
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
js实现随机数小游戏
2019/06/28 Javascript
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
python实现给数组按片赋值的方法
2015/07/28 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
python顺序执行多个py文件的方法
2019/06/29 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
基于python 取余问题(%)详解
2020/06/03 Python
Python文件夹批处理操作代码实例
2020/07/21 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
通过实例解析python and和or使用方法
2020/11/14 Python
DHC美国官网:日本通信销售第一的化妆品品牌
2017/11/12 全球购物
怎样创建、运行java程序
2014/08/01 面试题
广告学专业毕业生自荐信
2013/09/24 职场文书
八年级美术教学反思
2014/02/02 职场文书
关于旷工的检讨书
2014/02/02 职场文书
党员批评与自我批评发言
2014/10/02 职场文书
2016年寒假生活小结
2015/10/10 职场文书
妇产科护理心得体会
2016/01/22 职场文书
Python绘画好看的星空图
2022/03/17 Python
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技