关于JS变量和作用域详解


Posted in Javascript onJuly 28, 2016

ECMAScript 变量:

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

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

------

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

------

复制变量值 :

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

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

------

传递参数:

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

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

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

原因解释:

说法一:

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

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

------

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

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

------

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

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

------

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

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

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

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

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

------

延长作用域链:

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

1.try-catch语句的catch块

2.with语句
------

Javas没有块级作用域

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

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

Javascript 相关文章推荐
基于Web标准的UI组件 — 树状菜单(2)
Sep 18 Javascript
IE浏览器PNG图片透明效果代码
Sep 02 Javascript
JavaScript 变量命名规则
Sep 23 Javascript
jQuery中children()方法用法实例
Jan 07 Javascript
JavaScript驾驭网页-DOM
Mar 24 Javascript
JavaScript之json_动力节点Java学院整理
Jun 29 Javascript
bootstrap table服务端实现分页效果
Aug 10 Javascript
vue获取DOM元素并设置属性的两种实现方法
Sep 30 Javascript
Angular2+如何去除url中的#号详解
Dec 20 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
Feb 18 jQuery
Echarts地图添加引导线效果(labelLine)
Sep 30 Javascript
解决ant Design Search无法输入内容的问题
Oct 29 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
漂亮但不安全的CTB
2006/10/09 PHP
用户的详细注册和判断
2006/10/09 PHP
php 文件夹删除、php清除缓存程序
2009/08/25 PHP
两种设置php载入页面时编码的方法
2014/07/29 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
JS实现方向键切换输入框焦点的方法
2015/08/19 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
python实现聚类算法原理
2018/02/12 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
2018/04/26 Python
python ftp 按目录结构上传下载的实现代码
2018/09/12 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
英语专业学生个人求职信范文
2014/01/06 职场文书
打架检讨书2000字
2014/02/22 职场文书
年会搞笑主持词
2014/03/27 职场文书
婚内房产协议书范本
2014/10/02 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
公司考勤管理制度
2015/08/04 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
详解分布式系统中如何用python实现Paxos
2021/05/18 Python
python中validators库的使用方法详解
2022/09/23 Python