关于JS变量和作用域详解


Posted in Javascript onJuly 28, 2016

ECMAScript 变量:

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

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

------

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

------

复制变量值 :

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

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

------

传递参数:

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

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

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

原因解释:

说法一:

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

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

------

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

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

------

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

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

------

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

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

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

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

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

------

延长作用域链:

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

1.try-catch语句的catch块

2.with语句
------

Javas没有块级作用域

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

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

Javascript 相关文章推荐
JavaScript与DOM组合动态创建表格实例
Dec 23 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
Jan 03 Javascript
jquery如何判断某元素是否具备指定的样式
Nov 05 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
Jan 13 Javascript
jquery+easeing实现仿flash的载入动画
Mar 10 Javascript
Web Uploader文件上传插件使用详解
May 10 Javascript
jQuery之动画效果大全
Nov 09 Javascript
vue项目中做编辑功能传递数据时遇到问题的解决方法
Dec 19 Javascript
了解javascript中变量及函数的提升
May 27 Javascript
Vue实现日历小插件
Jun 26 Javascript
Vue性能优化的方法
Jul 30 Javascript
在项目vue中使用echarts的操作步骤
Sep 07 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
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
php实现斐波那契数列的简单写法
2014/07/19 PHP
smarty中js的调用方法示例
2014/10/27 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
文本加密解密
2006/06/23 Javascript
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
js 中 document.createEvent的用法
2010/08/29 Javascript
js jquery数组介绍
2012/07/15 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
超实用的JavaScript表单代码段
2016/02/26 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
2019/08/26 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
python strip() 函数和 split() 函数的详解及实例
2017/02/03 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
python xlsxwriter模块的使用
2020/12/24 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
opencv实现图像几何变换
2021/03/24 Python
简历中自我评价范文3则
2013/12/14 职场文书
小学生安全演讲稿
2014/04/25 职场文书
关于环保的标语
2014/06/13 职场文书
宿舍标语大全
2014/06/19 职场文书
英文演讲稿开场白
2014/08/25 职场文书
明确岗位职责
2015/02/14 职场文书
2015年安全月活动总结
2015/03/26 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书