关于JS变量和作用域详解


Posted in Javascript onJuly 28, 2016

ECMAScript 变量:

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

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

------

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

------

复制变量值 :

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

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

------

传递参数:

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

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

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

原因解释:

说法一:

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

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

------

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

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

------

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

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

------

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

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

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

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

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

------

延长作用域链:

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

1.try-catch语句的catch块

2.with语句
------

Javas没有块级作用域

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

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

Javascript 相关文章推荐
对联广告js flash激活
Oct 19 Javascript
js 表格隔行颜色
Dec 02 Javascript
Javascript 去除数组的重复元素
May 04 Javascript
浅析XMLHttpRequest的缓存问题
Dec 13 Javascript
jsPDF生成pdf后在网页展示实例
Jan 16 Javascript
jquery选择器之属性过滤选择器详解
Jan 27 Javascript
javascript图片预加载实例分析
Jul 16 Javascript
JavaScript中通过提示框跳转页面的方法
Feb 14 Javascript
javascript使用 concat 方法对数组进行合并的方法
Sep 08 Javascript
Vue微信项目按需授权登录策略实践思路详解
May 07 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
Aug 29 Javascript
JS实现点击按钮随机生成可拖动的不同颜色块示例
Jan 30 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的单引号和双引号 字符串效率
2009/05/27 PHP
PHP 单引号与双引号的区别
2009/11/24 PHP
php 大数据量及海量数据处理算法总结
2011/05/07 PHP
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
PHP弹出对话框技巧详细解读
2015/09/26 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
php DES加密算法实例分析
2019/09/18 PHP
Laravel 不同生产环境服务器的判断实践
2019/10/15 PHP
nginx 设置多个站跨域
2021/03/09 Servers
javascript multibox 全选
2009/03/22 Javascript
eval与window.eval的差别分析
2011/03/17 Javascript
Javascript算符的优先级介绍
2013/03/20 Javascript
JS嵌套函数调用上下文的问题解决
2014/03/26 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
jquery.form.js异步提交表单详解
2017/04/25 jQuery
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
微信小程序 可搜索的地址选择实现详解
2019/08/28 Javascript
[03:16]DOTA2完美大师赛主赛事首日集锦
2017/11/23 DOTA
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
Python拼接字符串的7种方法总结
2018/11/01 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
PyQt5实现登录页面
2020/05/30 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
七匹狼男装广告词
2014/03/21 职场文书
会计专业毕业生求职信
2014/07/04 职场文书
会计工作检讨书
2015/02/19 职场文书
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL