关于JS变量和作用域详解


Posted in Javascript onJuly 28, 2016

ECMAScript 变量:

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

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

------

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

------

复制变量值 :

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

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

------

传递参数:

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

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

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

原因解释:

说法一:

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

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

------

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

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

------

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

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

------

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

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

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

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

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

------

延长作用域链:

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

1.try-catch语句的catch块

2.with语句
------

Javas没有块级作用域

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

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

Javascript 相关文章推荐
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
Jan 13 Javascript
微信小程序开发之Tabbar实例详解
Jan 09 Javascript
js实现交通灯效果
Jan 13 Javascript
JavaScript中的遍历详解(多种遍历)
Apr 07 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
Jan 26 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
Sep 13 Javascript
JS回调函数深入理解
Oct 16 Javascript
vue使用一些外部插件及样式的配置代码
Nov 18 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
Jan 05 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
Aug 10 Javascript
vue 获取元素额外生成的data-v-xxx操作
Sep 09 Javascript
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
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 urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
JavaScript 验证码的实例代码(附效果图)
2013/03/22 Javascript
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
判断js对象是否拥有某一个属性的js代码
2013/08/16 Javascript
密码框显示提示文字jquery示例
2013/08/29 Javascript
js获取多个tagname的节点数组
2013/09/22 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
理解javascript async的用法
2017/08/22 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
VUE项目axios请求头更改Content-Type操作
2020/07/24 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
应届大学生自荐信格式
2013/09/21 职场文书
自我鉴定书范文
2013/10/02 职场文书
汽车队司机先进事迹材料
2014/02/01 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
企业法律事务工作总结
2015/08/11 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书
python开发的自动化运维工具ansible详解
2021/08/07 Python
Python使用openpyxl模块处理Excel文件
2022/06/05 Python