关于JS变量和作用域详解


Posted in Javascript onJuly 28, 2016

ECMAScript 变量:

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

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

------

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

------

复制变量值 :

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

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

------

传递参数:

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

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

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

原因解释:

说法一:

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

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

------

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

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

------

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

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

------

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

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

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

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

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

------

延长作用域链:

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

1.try-catch语句的catch块

2.with语句
------

Javas没有块级作用域

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

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

Javascript 相关文章推荐
ajax无刷新动态调用股票信息(改良版)
Nov 01 Javascript
JS短路原理的应用示例 精简代码的途径
Dec 13 Javascript
js中call与apply的用法小结
Dec 28 Javascript
canvas实现图像截取功能
Feb 06 Javascript
vue 设置路由的登录权限的方法
Jul 03 Javascript
Bootstrap模态对话框中显示动态内容的方法
Aug 10 Javascript
JS中‘hello’与new String(‘hello’)引出的问题详解
Aug 14 Javascript
vue权限管理系统的实现代码
Jan 17 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
Jan 29 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
Apr 28 Javascript
vue学习笔记之作用域插槽实例分析
Feb 01 Javascript
原生js实现自定义滚动条
Jan 20 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网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
php实现等比例压缩图片
2018/07/26 PHP
JS Array对象入门分析
2008/10/30 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
最佳6款用于移动网站开发的jQuery 图片滑块插件小结
2012/07/20 Javascript
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
2016/07/27 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
Vue中封装input组件的实例详解
2017/10/17 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
深入了解Vue.js 混入(mixins)
2020/07/23 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
2020/08/06 Javascript
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
[01:10:57]Liquid vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
python多进程实现进程间通信实例
2017/11/24 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
印度最大的时尚购物网站:Myntra
2018/09/13 全球购物
大学生村官典型材料
2014/01/12 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
写给医院的感谢信
2015/01/22 职场文书
党员自我评价范文2015
2015/03/03 职场文书
golang正则之命名分组方式
2021/04/25 Golang
JavaScript实现班级抽签小程序
2021/05/19 Javascript
简单谈谈Python面向对象的相关知识
2021/06/28 Python
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript