JS的作用域链
JavaScript词法性质作用域
简而言之就是,在JavaScript中,函数的作用域在编译时期就已经确定下来了,而不是取决于他的执行位置
var num = 10;
function method1() {
console.log(num);
}
function method2() {
var num = 20;
method1();
}
method2();//输出10
上边这个例子就印证了这一点,method1和method2都处于全局作用域当中,尽管method2的局部作用域中也存在变量num,method1在执行时会优先读取全局作用域中的变量num,所以method2的执行结果为10
代码块中的作用域
页面中可以放置多个<script>标签,每一个<script>标签被称作一个代码块,代码块之间可以相互访问(确切的说不完全是),当某一个代码块中出现了报错之后,这个代码块当中错误之后的代码不会再执行,但不影响这个代码块之后其他代码块的执行。
<script>
var b = 22;
console.log("first");
console.log(a); //a is not defined
var c = 33;
</script> <script>
console.log("second");
console.log(a); //undefined
console.log(b); //
console.log(c); //undefined
var a = 12;
</script>
不同代码块在编译的时候预解析时,会把变量声明和函数声明提前到当前代码块的顶部,与其他代码块不互通
根据预解析的原则,在代码块first运行时,a的声明在代码块second中,所以此时会报a is not defined错,此后的代码也不再被执行。代码块second运行时,a只被声明没有被赋值,所以是undefined;b在first代码块中已经完成了赋值操作,所以可以被正常输出22;c在first代码块中预解析时只被声明,赋值操作没有执行所以输出undefined
自执行函数
在我的理解里,自执行函数最主要的作用就是创建一个私有的局部作用域,以此来减少与上一层作用域中的变量冲突,因为在外部作用域中不能去访问自执行函数中变量或者方法。额外补充的是,今天了解到不只是()()的形式会形成自执行函数,!、+、-、×、/甚至逗号等运算符都可以形成自执行函数,本质是将函数声明转换为函数表达式,详细可以看http://www.cnblogs.com/jkj-jim/p/6374139.html
JS的作用域链的更多相关文章
- JS 之作用域链和闭包
1.JS无块级作用域 <script> function Main(){ if (1==1){ var name = "alex"; } console.log(nam ...
- js中作用域链的问题
为什么没有var声明的变量是全局的? 是因为,在js中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没有找到,继续向上查找,一直查找到全局作用域为止 ...
- JS的作用域链与this指向
JS的作用域链是在函数创建时创建的.而this对象是在函数运行期间绑定的. 下面看几个例子,说明JS的作用域链和this是两套分离的链. 1) var name = 'window下的name< ...
- JS的作用域链与原型链
来一波,好记性不如烂笔头. 这两条链子可是很重要的. 作用域链 当执行一段JS代码(全局代码或函数)时,JS引擎会创建为其创建一个作用域又称为执行上下文(Execution Context),在页面加 ...
- 浅谈JS的作用域链(一)
JS的执行环境 执行环境(Execution context,EC)或执行上下文,是JS中一个极为重要的概念. 在JavaScript中有三种代码运行环境: Global Code JavaScrip ...
- 深入理解JS函数作用域链与闭包问题
function fun(n,o) { console.log(o) return { fun:function(m){ return fun(m,n); } }; } ); a.fun(); a.f ...
- js之作用域链到闭包
一.作用域 全局作用域和函数作用域(局部作用域). 一个变量的作用域就是源代码中定义这个变量的区域. 二.作用域链和闭包 全局变量只有一个(window,globel),全局环境下每一个函数都会形成一 ...
- 浅谈JS的作用域链(三)
前面两篇文章介绍了JavaScript执行上下文中两个重要属性:VO/AO和scope chain.本文就来看看执行上下文中的this. 首先看看下面两个对this的概括: this是执行上下文(Ex ...
- 浅谈JS的作用域链(二)
上一篇文章中介绍了Execution Context中的三个重要部分:VO/AO,scope chain和this,并详细的介绍了VO/AO在JavaScript代码执行中的表现. 本文就看看Exec ...
- js高级-作用域链
作用域链存放的就是 VO AO 参数 变量 等
随机推荐
- 从零开始学习python:demo2.3
字符串拼接+: first="hello" #将hello赋值给变量firstsecond="world" #将world赋值给变量secondfull=fir ...
- iOS下 UILabel 如何自动换行
背景: 相信很多朋友都遇到过,文本的内容长度不一,需要根据内容的多少来自动换行处理. 场景: 很多APP中评论,有的评论长,有的评论短,有的一行,有的多行. 下面以评论的实现为例来说说具体如何实现 ...
- 注意source folder与folder是不同的,避免404错误
在整合ssm框架的时候,程序和配置文件都没写错,tomcat也部署成功了,但在访问的时候一直404,web项目自带的index.jap却能正常访问,一直找不到原因,后来发现建立放配置文件的文件夹con ...
- MapReduce时mapping内存不足
17/11/07 16:53:50 INFO mapreduce.Job: Job job_1510042506570_0007 failed with state KILLED due to: MA ...
- Windows服务器
知道了怎么装VMware workstation并且创建虚拟机装上了系统配好网络
- [WSGI]WSGI的服务端怎么实现?
WSGI ( Python Web Server GateWay Interface) 是一个用在python web server 跟web application 之间的协议,遵从WSGI协议设计 ...
- Springboot中对Service层进行集成测试时注意点
@SpringBootTest(classes = {DataSourceAutoConfiguration.class,MybatisAutoConfiguration.class,****Impl ...
- jsfl 添加代码
var __name=""; var __author=""; var __book=[]; var newJz=""; for(var d ...
- Java_延迟操作
1. 用Thread就不会iu无法终止 new Thread(new Runnable() { public void run() { ...
- python基础系列教程,数学基础系列教程,数据分析系列教程,神经网络系列教程,深度学习系列视频教程分享交流
大家好,我是一个技术爱好者,目前对大数据人工智能很是痴迷,虽然学历只有高中,目前正在大踏步的向着人工智能狂奔,如果你也想学习,那就来吧 我的学习进度python基础(Numpy,pandas,matp ...