javascript执行环境以及作用域链的理解
在javascript脚步语言中执行环境有两种:
全局环境:
局部环境:
我们可以拿一个田径跑道来打比方,全局环境就可以理解为是最外面跑道,它包含着内部所有的东西,有人在跑步,有人在跳远,这些用着不同特色方法比赛的人都在这个跑道里面,被全局环境包含着
那么在浏览器当中,全局也被认作是window,所有活动在内的都被视作为是window对象内的
而局部环境往往在函数被创建的时候拥有.当一个环境被创建执行,它内部的代码块就拥有独立的作用域,也就是说javascript规则定义了函数内部的运行规范,我们应该根据它定义的来进行操作.
那么javascript给函数内部定义了什么样的规则呢?我们简单来理解下反而更容易接受.
1.在函数被创建的时候,会自动生成this,args对象,(后面着重解释)
2.在函数内部的所有属性方法我们都称它为活动对象
3.函数内部的有权访问规则,它只能访问包含于它环境当中的活动变量,我们用一个访问变量的过程来体会下这个规则
var name="javascript";
function example(){
console.log(name);
}
example();
在全局环境中定义了一个变量name,和一个函数方法example
我们在函数内部并没有定义变量name,但是执行结果就是变量name的值;这样一来我们就可以看出在这个局部环境当中这个作用域的初始规则,它是可以访问函数外层的变量
说到这,我们来用局部环境访问变量的形式来理解下javascript的访问执行过程.
简单来理解: 从访问源开始,也就是哪里调用访问的开始,上面的代码是从函数内部调用变量name;那么javascript的规则就是,从调用的地方开始向上查询,先在函数体内部查询该变量,如果找到立马停止查询,没有找到它会自动跑到上一个包含环境当中去找,在这里上一级的包含环境就是全局环境,如果上一级还没找到,就会继续往上一级包含环境中去找,直到查询到全局环境当中,如果还没有找到,就会返回undefined
这样一来,上面在函数体内部并没有找到该变量,但是往上一级全局环境中找到了,就会打印出来.
例:在上面函数中定义变量name="javascript2";那么执行结果就为:javascript2
当然,javascript规定,包含环境是不允许访问它下级局部环境的活动对象的,例如:在全局环境当中直接打印函数内部变量
console.log(js);
function (){
var js="javascript";
}
此时javascript是找到不变量js的,这就是javascript的执行环境访问规则
javascript执行环境以及作用域链的理解的更多相关文章
- 深度剖析Javascript执行环境、作用域链
一.执行环境 执行环境(也叫做执行上下文,Execution Context)是Javascript中最为重要的一个概念.执行环境定义了变量或函数有权访问其他数据,决定了它们各自的行为.每个执行环境都 ...
- javaScript执行环境、作用域链与闭包
一.执行环境 执行环境定义了变量和函数有权访问的其他数据,决定了他们各自的行为:每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中.虽然我们编写的代码无法访问这个对象 ...
- JavaScript 执行环境以及作用域链
执行环境(execution context,为简单起见,有时也称为"环境")是 JavaScript 中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们 ...
- Javascript执行环境、作用域链
执行环境 可以把执行环境想象为一个圆圈,里面包含了一些变量.函数. 执行环境定义了变量或函数的有权访问的其他数据,决定了它们各自的行为.还有一个顶部执行环境.在浏览器中,顶部执行环境既为window, ...
- JavaScript执行环境和作用域(链)的那些事
执行环境 什么是执行环境 提起作用域,我们不得不说说什么是执行环境.执行环境定义了变量或函数有权访问的其他数据,并决定其各自的行为.每一个执行环境都有一个对应的变量对象,这个对象的作用就是保存在环境中 ...
- javascript 执行环境,作用域链和闭包
首先看下这条语句: (function($) {…})(jQuery): 1.原理: function(arg){…}这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写上括号和实参的, ...
- JavaScript 执行环境、作用域、内存管理及垃圾回收机制
前言 JavaScript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存. [原理]找出那些不再继续使用的变量,然后释放其占用的内存.为此,垃圾收集器会按照固定的时间间隔( ...
- JavaScript:理解执行环境、作用域链和活动对象
作用域的原理,对JS将如何解析标识符做出了解答.而作用域的形成与执行环境和活动对象紧密相关. 我们对于JS标识符解析的判断,存在一个常见误区 首先,看一个关于JS标识符解析的问题 ,源于风雪之隅提出的 ...
- JavaScript之一: 闭包、执行环境、作用域链
这是大虾的第一篇博文,大虾试图用最直白的语言去描述出所理解的东西,大虾是菜鸟,水平有限,有误的地方希望路过的朋友们务必指正,谢谢大家了. 从读书时代一路走来,大虾在学习的时候逐渐喜欢上了去追寻根源,这 ...
随机推荐
- 【状压DP】poj2686 Traveling by Stagecoach
状压DP裸题,将({当前车票集合},当前顶点)这样一个二元组当成状态,然后 边权/马匹 当成边长,跑最短路或者DAG上的DP即可. #include<cstdio> #include< ...
- 【分块】bzoj1901 Zju2112 Dynamic Rankings
区间k大,分块大法好,每个区间内存储一个有序表. 二分答案,统计在区间内小于二分到的答案的值的个数,在每个整块内二分.零散的暴力即可. 还是说∵有二分操作,∴每个块的大小定为sqrt(n*log2(n ...
- 在C#中快速查询文件
相信使用过Everything的人都对其超快的搜索速度印象非常深刻,它的主要原理是通过扫描NTFS磁盘的USN Journal读取的文件列表,而不是磁盘目录,由于USN Journal非常小,因此能实 ...
- 理解SQL原理,写出高效代码
做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,数据量大,人员流动大,那么我们还能保证下一段时间系统还能流畅的运行吗?我们还能保证下 ...
- SQLite 使用技巧
http://blog.csdn.net/beifengdelei/article/details/7166056 SQLite自增ID自段使用方法为 INTEGER PRIMARY KEY AUTO ...
- 北京极科极客科技有限公司 http://www.hiwifi.com/
北京极科极客科技有限公司 http://www.hiwifi.com/ 产品:hiwifi 199元.
- centos7使用samba共享文件
samba是一款可以让linux和windows下共享文件的常用的一款软件 如何在centos7中使用和配置samba 首先先安装 sudo yum install samba 下载完成查看rpm - ...
- jsp标签、 项目全路径引用${ctx}
请根据自己的需要选择以下标签. <%@ taglib uri="/struts-tags" prefix="s"%> <%@ taglib u ...
- JSON 对象
JSON 对象 对象语法 { "name":"runoob", "alexa":10000, "site":null } ...
- S7:享元模式 Flyweight
运用共享技术有效的支持大量细粒度的对象. 应用场景: A.减少对相同对象的重复创建 UML: 示例代码:如果在工厂中,有用户,我们就直接调用,没有用户,我们就获取.减少对同一uid的user对象的重复 ...