JavaScript作用域原理(一)——作用域链
一、作用域的描述
JavaScript权威指南中对作用域有一句很精辟的描述:“JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里。”
在JavaScript中,作用域的概念和其他语言差不多,在每次调用一个函数的时候,就会进入一个函数内的作用域,当从函数返回以后,就返回调用前的作用域。
验证下刚那句权威指南中的话:
<p id="scope1" style="color:red"></p>
function echo(p, html) {
p.innerHTML += html + '<br/>';
}
//1、
var position = 'out';
var pscope1 = document.getElementById('scope1');
function scope1() {
echo(pscope1, position);
}
function set1() {
var position = 'in';
scope1();
}
set1();
1、变量scope1定位到一个p标签,用于打印信息的显示
2、echo是一个自定义的函数,用于打印信息,形参一个是p标签,一个是需要打印的信息内容
3、最后打印出的是“out”,由于打印操作在scope1函数中,scope1中没有变量position,只能往外一层的作用域中查找,作用域关系如下图所示:
aaarticlea/png;base64,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" alt="" />
4、调用set1的作用域链大致样子如下:
aaarticlea/png;base64,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" alt="" />
二、作用域的实现
作用域的实现,并非用“堆栈”方式,而是使用列表,ECMA262中所述如下:
任何执行上下文时刻的作用域, 都是由作用域链(scope chain)来实现
在一个函数被定义的时候, 会将它定义时刻的scope chain链接到这个函数对象的[[scope]]属性
在一个函数对象被调用的时候,会创建一个活动对象(也就是一个对象), 然后对于每一个函数的形参,都命名为该活动对象的命名属性, 然后将这个活动对象做为此时的作用域链(scope chain)最前端, 并将这个函数对象的[[scope]]加入到scope chain中
再来看下两个实例,练练手:
function function1() {
var x = 'in function1';
function inner1() {
x = 'in inner1'; //没有加var,等同于在外面这个函数中做声明
}
inner1();
echo(pscope1, x);
}
function1();
最终打印出来的结果是“in inner1”
function function2() {
var x = 'in function2';
function inner2() {
echo(pscope1, x);
var x = 'in inner2'; //加var
echo(pscope1, x);
}
inner2();
echo(pscope1, x);
}
function2();
第一个echo将打印出“undefined”,第二个echo打印出“in inner2”,第三个echo打印出“in function2”。
上面的inner2等同于下面的代码:
function inner2() {
var x
echo(pscope1, x); //这个时候x还未定义
x = 'in inner2';
echo(pscope1, x);
}
对作用域链的理解上可能还有些问题,欢迎大家来指正。
demo下载:
http://download.csdn.net/detail/loneleaf1/7983577
参考资料:
http://www.laruence.com/2009/05/28/863.html Javascript作用域原理
http://www.cnblogs.com/lhb25/archive/2011/09/06/javascript-scope-chain.html JavaScript 开发进阶:理解 JavaScript 作用域和作用域链
http://www.cnblogs.com/zxj159/archive/2013/05/30/3107923.html Javascript之匿名函数(模仿块级作用域)
http://www.web-tinker.com/article/20331.html try-catch语句的“伪块作用域”
http://msdn.microsoft.com/zh-cn/library/bzt2dkta%28v=vs.94%29.aspx 变量作用域 (JavaScript)
http://www.cnblogs.com/rubylouvre/archive/2009/08/21/1551270.html javascript变量的作用域
http://www.nowamagic.net/librarys/veda/detail/896 深入浅出JavaScript变量作用域
JavaScript作用域原理(一)——作用域链的更多相关文章
- JavaScript作用域原理(三)——作用域根据函数划分
一.一个for实例 <p id="scope3" style="color:red"></p> var pscope3 = docume ...
- JavaScript作用域原理(二)——预编译
JavaScript是一种脚本语言, 它的执行过程, 是一种翻译执行的过程.并且JavaScript是有预编译过程的,在执行每一段脚本代码之前, 都会首先处理var关键字和function定义式(函数 ...
- JavaScript 之 预编译 作用域,作用域链
第一次写博客,本来是学习jQuery遇到闭包问题,发现并没有理解闭包,发现闭包牵扯的知识点太多.复习了一遍(发现自己该记住的全忘了)写在博客里,自己也是小白,希望大神们指点迷津,必将感激不尽. 我们知 ...
- javascript篇-----函数作用域,函数作用域链和声明提前
在一些类似C语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的(也就是我们不能在代码段外直接访问代码段内声明的变量),我们称之为块级作用域,然而,不同于 ...
- 深入理解javascript中执行环境(作用域)与作用域链
深入理解javascript中执行环境(作用域)与作用域链 相信很多初学者对与javascript中的执行环境与作用域链不能很好的理解,这里,我会按照自己的理解同大家一起分享. 一般情况下,我们把执行 ...
- javascript之变量、作用域、作用域链
一.变量 javascript的变量是松散类型的,所谓松散类型就是说定义的变量可以用来保存任何类型的数据.定义变量时要使用var操作符后面跟变量名.这里的var是一个关键字,如果定义变量时省略了var ...
- Javascript中闭包的作用域链
作用域定义了在当前上下文中能够被访问到的成员,在Javascript中分为全局作用域和函数作用域,通过函数嵌套可以实现嵌套作用域. 闭包一般发生在嵌套作用域中.闭包是JavaScript最强大的特性之 ...
- 《前端之路》之四 JavaScript 的闭包、作用域、作用域链
04:JavaScript 的闭包 一.定义: 常规定义: 闭包的定义: 有权利访问外部函数作用域的函数. 通俗定义: 1.函数内部包含了函数.然后内部函数可以访问外部函数的作用域. 2.内部函数可以 ...
- javascript 执行环境,作用域、作用域链、闭包
1.执行环境 执行环境是JavaScript中国最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为.每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数 ...
随机推荐
- SSH框架的简单示例(执行流程)
本文转自一篇博文,感觉通俗易懂,适用于初学j2ee者,与大家一起分享 (一)struts框架部分 1.打开Myeclipse,创建一个web project,项目名称为TestSSH. 2.在web的 ...
- Demystifying ASP.NET MVC 5 Error Pages and Error Logging
出处:http://dusted.codes/demystifying-aspnet-mvc-5-error-pages-and-error-logging Error pages and error ...
- Java IO3:字节流
流类 Java的流式输入/输出是建立在四个抽象类的基础上的:InputStream.OutputStream.Reader.Writer.它们用来创建具体的流式子类.尽管程序通过具体子类执行输入/输出 ...
- AMD加载器实现笔记(一)
之前研究过AMD,也写过一篇关于AMD的文章<以代码爱好者角度来看AMD与CMD>.代码我是有看过的,基本的原理也都明白,但实际动手去实现却是没有的.因为今年计划的dojo教程<静静 ...
- 作业七:团队项目——Alpha版本冲刺阶段-09
昨天进展:代码编写. 今天安排:代码编写.
- js函数实现转换css中常用的颜色编码
//转换css中常用颜色编码 var toRGB = function (val){ var reg1 = /^#([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i; ...
- Caliburn实现MVVM模式的编程
引言:什么是Caliburn ? 一个夜晚,一处教堂,人们忏悔结束后抬头看到一把宝剑插在一块石头上.石上字述“英格兰人,凡能从石头上拔出剑者,为王者!”,Caliburn就是英格兰人心中的石中剑,这把 ...
- [nRF51822] 4、 图解nRF51 SDK中的Schedule handling library 和Timer library
:nRF51822虽然是一个小型的单片机,但是能真正达到任意调用其官方驱动以及BLE协议栈的人还是奇缺的.据我所见,大都拿官方给的一个冗长的蓝牙低功耗心率计工程改的.之前我对于这个工程进行log跟踪, ...
- C#将dll打包到程序中
最近比较懒,加上内容也不多就懒得排版了,字放大了,看起来应该方便一点 直接进入主题 先来看一个栗子,假设现在有一个第三方dll namespace TestLibrary1 { public clas ...
- jeechart
个人网站地址:http://blog.niubua.com jeechart(1)——普通的分页查询 :http://blog.niubua.com/2014/09/18/jeechart(1)-普通 ...