关于JS变量和作用域详解


Posted in Javascript onJuly 28, 2016

ECMAScript 变量:

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

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

------

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

------

复制变量值 :

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

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

------

传递参数:

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

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

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

原因解释:

说法一:

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

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

------

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

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

------

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

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

------

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

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

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

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

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

------

延长作用域链:

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

1.try-catch语句的catch块

2.with语句
------

Javas没有块级作用域

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

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

Javascript 相关文章推荐
XML+XSL 与 HTML 两种方案的结合
Apr 22 Javascript
jQuery与其它库冲突的解决方法
Jun 25 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
Apr 16 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
Oct 10 Javascript
JavaScript统计字符串中每个字符出现次数完整实例
Jan 28 Javascript
jQuery 调用WebService 实例讲解
Jun 28 Javascript
AngularJS+Bootstrap实现多文件上传与管理
Nov 08 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
Aug 09 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
Nov 29 Javascript
Node.js笔记之process模块解读
May 31 Javascript
小程序中设置缓存过期的实现方法
Jan 14 Javascript
vue 实现tab切换保持数据状态
Jul 21 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 session有效期session.gc_maxlifetime
2011/04/20 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
js静态作用域的功能。
2006/12/25 Javascript
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
Js 随机数产生6位数字
2010/05/13 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
一起深入理解js中的事件对象
2021/02/06 Javascript
在Python中使用Mako模版库的简单教程
2015/04/08 Python
python实现文本去重且不打乱原本顺序
2016/01/26 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
python邮件发送smtplib使用详解
2020/06/16 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
python代码xml转txt实例
2020/03/10 Python
django 模版关闭转义方式
2020/05/14 Python
猫咪家具:CatsPlay
2018/11/03 全球购物
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
节能宣传周活动总结
2014/05/08 职场文书
个人合作协议范本
2015/08/06 职场文书
python 遍历磁盘目录的三种方法
2021/04/02 Python
mybatis 获取更新记录的id
2022/05/20 Java/Android
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript