关于JS变量和作用域详解


Posted in Javascript onJuly 28, 2016

ECMAScript 变量:

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

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

------

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

------

复制变量值 :

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

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

------

传递参数:

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

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

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

原因解释:

说法一:

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

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

------

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

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

------

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

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

------

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

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

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

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

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

------

延长作用域链:

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

1.try-catch语句的catch块

2.with语句
------

Javas没有块级作用域

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

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

Javascript 相关文章推荐
bgsound 背景音乐 的一些常用方法及特殊用法小结
May 11 Javascript
JS 操作Array数组的方法及属性实例解析
Jan 08 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
Aug 11 Javascript
jQuery支持添加事件的日历特效代码分享(3种样式)
Aug 24 Javascript
基于Jquery easyui 选中特定的tab
Nov 17 Javascript
详解JS-- 浮点数运算处理
Nov 28 Javascript
js图片放大镜效果实现方法详解
Oct 28 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
Apr 16 Javascript
深入浅出webpack之externals的使用
Dec 04 Javascript
vue项目中实现图片预览的公用组件功能
Oct 26 Javascript
js面向对象之实现淘宝放大镜
Jan 15 Javascript
JS highcharts动态柱状图原理及实现
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
phpstrom使用xdebug配置方法
2013/12/17 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
PHP自毁程序(慎用)
2015/07/09 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
javascript 类方法定义还是有点区别
2009/04/15 Javascript
php is_numberic函数造成的SQL注入漏洞
2014/03/10 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
JS中的Replace()传入函数时的用法详解
2017/09/11 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
[42:27]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第三局
2016/03/05 DOTA
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
Python二维码生成库qrcode安装和使用示例
2014/12/16 Python
Python深入06——python的内存管理详解
2016/12/07 Python
有趣的python小程序分享
2017/12/05 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
Python应用自动化部署工具Fabric原理及使用解析
2020/11/30 Python
新三好学生主要事迹
2014/01/23 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
奖励通知
2015/04/22 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript