函数可以被多个上下文所使用,作用域可以被封装或保护。每一个函数调用都联系着一个作用域和一个上下文。根本上说,
作用域是基于函数的而上下文是基于对象的。
先看几个术语的解释:
变量作用域
变量能够被定义在局部或者全局作用域,这导致运行时变量的访问来自不同的作用域。
全局变量:声明在函数体外,在整个运行过程中都存在,能在任何作用域中访问和修改。
局部变量:仅在函数体内定义,每次被调用都将产生一个新的作用域。
另:ES6中支持通过let关键字定义块作用域变量。
“this”上下文
上下文决定一个函数是怎么被调用的。当一个函数作为一个对象的方法被掉调用时,this指向调用这个方法的对象:
var object = {
foo: function(){
alert(this === object);
}
};
object.foo(); // true
函数作为未绑定对象被调用时,this默认指向全局上下文或者浏览器中的window对象。严格模式下被执行,上下文将被默认为undefined:
执行上下文(execution context)
每次一个新的执行上下文被创建时,它都被添加到了作用域链(有时它也被称为执行栈或者调用栈)的顶部。浏览器总是执行当前位于作用域链顶部的执行上下文。一旦执行完成,它就会被从栈的顶部移除,并将控制权返回到它下面的执行上下文。
每次调用函数,都会创建新的执行上下文。在JavaScript解释器内部,每次调用执行上下文,分为两个阶段:
1.创建阶段【当函数被调用,但未执行任何其内部代码之前】:
创建作用域链(Scope Chain)
创建变量,函数和参数。
求”this“的值。
2.激活/代码执行阶段:
指派变量的值和函数的引用,解释/执行代码。
看了这么多理论知识,下面来个练习题吧:请问输出是多少?Answer:3
http://www.html-js.com/article/Scope-and-context-learning-every-day-JavaScript-article-understand-Javascript
这个翻译的文章讲解的很清楚:
http://yanhaijing.com/javascript/2014/04/29/what-is-the-execution-context-in-javascript/
- 大小: 28.7 KB
分享到:
相关推荐
Javascript中的作用域和上下文的实现是Javascript语言独有的特性,从某种程度上来说,Javascript语言是十分灵活的。Javascript中的函数可以采用各种各样的上下文,作用域也可以被封装和保存。正是由于这些特性,...
深化浅析JavaScript中的作用域和上下文_.docx
javascript中的作用域(scope)和上下文(context)是这门语言的独到之处,这部分归功于他们带来的灵活性。每个函数有不同的变量上下文和作用域。这些概念是javascript中一些强大的设计模式的后盾。然而这也给开发人员...
JavaScript 采用词法作用域(lexical scoping),函数执行依赖的变量作用域是由函数定义的时候决定,而不是函数执行的时候决定,通过本文给大家介绍JavaScript作用域链、执行上下文与闭包相关知识,感兴趣的朋友一起...
文章目录变量提升执行上下文全局执行上下文函数执行上下文执行上下文栈作用域例题举个栗子 执行上下文栈:举个栗子 变量提升+执行上下文栈:举个栗子 预处理顺序举个栗子 预处理举个栗子 顺序执行举个栗子 作用域举...
一段程序可能被分割成许多不同的上下文,每一个上下文都会绑定一个变量对象(variable object),它就像一个容器,用来存储当前上下文中所有已定义或可获取的变量、函数等。位于最顶端或最外层的上下文称为全局上...
前端面试题,包含JavaScript的闭包,作用域,原型,原型链,上下文环境以及DOM,BOM封装函数深度克隆,以及一些常见的·JS问题,试题简单但是容易混淆,作为前端工程师必考题
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。 ...
javascript的变量作用域,与平时使用的类C语言不同,例如C#中的代码: static void Main(string[] args) { if(true) { int number=10; } Console.WriteLine(number); } 这段代码进行编译,是无法通过的,...
下面全面揭示了javascript中的上下文和作用域的不同,以及各种设计模式如何使用他们,感兴趣的朋友不要错过
作用域是变量的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在 JavaScript 中, 对象和函数同样也是变量,变量在声明他们的函数体以及这个函数体嵌套的任意函数体内部都是有定义的。 一、静态作用域和...
在ES6之前,javascript只有全局作用域和函数作用域。所谓作用域就是一个变量定义并能够被访问到的范围。也就是说如果一个变量定义在全局(window)上,那么在任何地方都能访问到这个变量,如果这个变量定义在函数...
一、JavaScript作用域 JavaScript变量实际上只有两种作用域,全局变量和函数的内部变量。在函数内部任何一个地方定义的变量(var scope)其作用域都是整个函数体。 全局变量:指的是window对象下的对象属性。 作用域...
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。 一、...
JavaScript 中有一个被称为作用域(Scope)的特性。虽然对于许多新手开发者来说,作用域的概念并不是很容易理解,本文我会尽我所能用最简单的方式来解释作用域和作用域链,希望大家有所收获! 作用域(Scope) 1. 什么是...
1.当代码执行的时候,首先生成一个全局执行上下文(global EC) 2.当执行到函数作用域时,全局执行上下文(caller)会触发该函数执行上下文(call