关于JS变量和作用域详解


Posted in Javascript onJuly 28, 2016

ECMAScript 变量:

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

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

------

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

------

复制变量值 :

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

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

------

传递参数:

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

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

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

原因解释:

说法一:

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

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

------

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

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

------

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

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

------

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

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

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

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

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

------

延长作用域链:

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

1.try-catch语句的catch块

2.with语句
------

Javas没有块级作用域

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

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

Javascript 相关文章推荐
jQuery Clone Bug解决代码
Dec 22 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
Oct 17 Javascript
JavaScript中操作Mysql数据库实例
Apr 02 Javascript
jquery模拟alert的弹窗插件
Jul 31 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
Oct 28 Javascript
JSON 对象未定义错误的解决方法
Sep 29 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
Jan 10 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
Feb 14 Javascript
详解Vue2.5+迁移至Typescript指南
Aug 01 Javascript
记录vue做微信自定义分享的一些问题
Sep 12 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
Apr 26 Javascript
浅谈Vue 自动化部署打包上线
Jun 14 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
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
JavaScript实现短暂提示框功能
2018/04/04 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
Vue实现点击当前行变色
2020/12/14 Vue.js
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
Python Queue模块详解
2014/11/30 Python
python检查URL是否正常访问的小技巧
2017/02/25 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
python代码过长的换行方法
2018/07/19 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
python word转pdf代码实例
2019/08/16 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
一些Unix笔试题和面试题
2012/09/25 面试题
某公司面试题
2012/03/05 面试题
爱护公物标语
2014/06/24 职场文书
优秀共产党员推荐材料
2014/12/18 职场文书
家长给老师的感谢信
2015/01/20 职场文书
项目战略合作意向书
2015/05/08 职场文书
三八红旗手主要事迹材料
2015/11/04 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server
nginx容器方式反向代理实战
2022/04/18 Servers
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript