函数可以被多个上下文所使用,作用域可以被封装或保护。每一个函数调用都联系着一个作用域和一个上下文。根本上说,
作用域是基于函数的而上下文是基于对象的。
先看几个术语的解释:
变量作用域
变量能够被定义在局部或者全局作用域,这导致运行时变量的访问来自不同的作用域。
全局变量:声明在函数体外,在整个运行过程中都存在,能在任何作用域中访问和修改。
局部变量:仅在函数体内定义,每次被调用都将产生一个新的作用域。
另: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中,作用域和上下文是理解代码执行逻辑的关键概念。作用域指的是变量和函数的可见性和生命周期,而上下文则关乎`this`关键字的值,它指示了当前代码执行的环境。 **作用域(Scope)** 1. **全局作用域**...
Javascript中的作用域和上下文的实现是Javascript语言独有的特性,从某种程度上来说,Javascript语言是十分灵活的。Javascript中的函数可以采用各种各样的上下文,作用域也可以被封装和保存。正是由于这些特性,...
JavaScript中的作用域和上下文是编程时必须理解的关键概念,特别是在JavaScript这种动态类型的脚本语言中。作用域决定了变量的可见性和生命周期,而上下文则与`this`关键字的值有关,它指定了当前执行代码的对象。 ...
JavaScript作用域是编程中至关重要的概念,它规定了变量和函数的可见性及生命周期。JavaScript主要有两种作用域:全局作用域和局部作用域。 全局作用域是指在代码的任何位置都可以访问的变量或函数,这通常包括在最...
JavaScript中的作用域链是编程中一个至关重要的概念,它决定了变量和函数的可访问性以及在不同作用域内的查找顺序。在深入理解作用域链之前,我们首先要了解什么是执行环境和变量对象。 执行环境,简单来说,就是...
变量对象负责管理该上下文中所有的变量和函数声明。变量对象实际上并不是一个普通的JavaScript对象,而是一个由引擎维护的内部结构。 - **全局执行上下文的变量对象**:全局执行上下文中,变量对象通常是`window`...
在JavaScript中,变量名冲突是通过作用域链解决的,即在当前执行上下文中找不到变量时,会继续向上遍历作用域链。此外,闭包(Closure)是一个非常重要的概念,它允许一个函数访问并操作函数外部的变量。这是通过...
JavaScript中的作用域、执行上下文和闭包是理解JavaScript运行机制的关键概念。本文将深入探讨这些概念,并通过实例解析它们的工作原理。 首先,我们来看**词法作用域**。JavaScript遵循词法作用域规则,意味着变量...
JavaScript作用域是编程中至关重要的概念,尤其是在JavaScript这种动态类型的脚本语言中。它规定了变量、函数以及其它标识符的可见性和生命周期,是代码组织和管理的关键元素。本资料"深入理解JavaScript作用域共12...
在JavaScript编程中,作用域和作用域链是影响程序性能的关键因素之一。优化作用域链是提高JavaScript代码执行效率的重要手段。下面我们从多个方面来详细探讨作用域链的概念、作用域链的层级关系、变量访问的性能影响...
前端面试题,包含JavaScript的闭包,作用域,原型,原型链,上下文环境以及DOM,BOM封装函数深度克隆,以及一些常见的·JS问题,试题简单但是容易混淆,作为前端工程师必考题
javascript的变量作用域,与平时使用的类C语言不同,例如C#中的代码: static void Main(string[] args) { if(true) { int number=10; } Console.WriteLine(number); } 这段代码进行编译,是无法通过的,...
在JavaScript中,作用域和闭包是两个非常重要的概念,它们对于理解和编写高效、可靠的代码至关重要。让我们深入探讨这两个主题。 首先,我们来看一下**作用域**。作用域决定了变量和函数在何处可以被访问。主要有两...
### JavaScript作用域链(Scope Chain)初探 #### 一、引言 JavaScript的作用域链是一个重要的概念,尤其是在深入理解JavaScript执行机制时不可或缺的一部分。本文将通过对几个具体例子的分析来探讨JavaScript作用域...