关于JS变量和作用域详解


Posted in Javascript onJuly 28, 2016

ECMAScript 变量:

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

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

------

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

------

复制变量值 :

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

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

------

传递参数:

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

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

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

原因解释:

说法一:

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

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

------

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

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

------

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

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

------

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

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

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

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

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

------

延长作用域链:

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

1.try-catch语句的catch块

2.with语句
------

Javas没有块级作用域

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

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

Javascript 相关文章推荐
angularJS 中$attrs方法使用指南
Feb 09 Javascript
JQuery中层次选择器用法实例详解
May 18 Javascript
简介JavaScript中的setTime()方法的使用
Jun 11 Javascript
详解javascript new的运行机制
Jan 26 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
May 10 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
Sep 28 Javascript
使用express搭建一个简单的查询服务器的方法
Feb 09 Javascript
jQuery超简单遮罩层实现方法示例
Sep 06 jQuery
如何从0开始用node写一个自己的命令行程序
Dec 29 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
Nov 09 Javascript
聊聊JS ES6中的解构
Apr 29 Javascript
浅谈克隆 JavaScript
Nov 02 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
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
PHP中=赋值操作符对不同数据类型的不同行为
2011/01/02 PHP
基于php-fpm的配置详解
2013/06/03 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
php使用json-schema模块实现json校验示例
2019/09/28 PHP
javascript 单选框,多选框美化代码
2008/08/01 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
html5 学习简单的拾色器
2010/09/03 HTML / CSS
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
iframe与window.onload如何使用详解
2020/05/07 HTML / CSS
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
工作中的自我评价如何写好
2013/10/28 职场文书
国际会议邀请函范文
2014/01/16 职场文书
大学新生军训感言
2014/02/25 职场文书
办公自动化毕业生求职信
2014/03/09 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
机关办公室岗位职责
2014/04/16 职场文书
12岁生日演讲稿
2014/05/14 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
社会工作专业自荐信
2014/09/26 职场文书
介绍信范文
2015/01/31 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
单身证明格式样本
2015/06/15 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python