作用域和执行上下文,很多人容易把它们混淆,在这简单地做个比较。
作用域是函数定义的时候就确定好的了,函数当中的变量是和函数所处的作用域有关,函数运行的作用域也是与该函数定义时的作用域有关。
上下文,主要是相对于关键字this的值来说的,this是由函数运行时决定的。打个比如,我们大家都知道“语境”这个词,语境指的是通过一定语言环境以揭示概念在相对关系下的意义的定义。通俗点就是一句在不同的场合表达的意思可能是不一样。比如,他傻了。一种情况是表示他真的变傻了,另一种是大家开玩笑的情况下对他的一个调侃。所以不同的场合表示的意义是不一样的。这个上下文跟语境类似。大家看下下面的例子:
function foo(){
console.log( this.a );
}
var a = 2;
var obj = {
a: 3,
foo: foo
};
var bar = obj.foo;
bar(); //2
从结果可以看出,foo函数中的this指向的是全局的window,并不是obj本身。稍微改造下:
function foo(){
console.log( this.a );
}
var obj = {
a: 3
};
foo.call(obj);//3
从结果可以看出这个this指向的是obj,所以输出了3。从这个例子也能看出call是能改变上下文的。
从上面可以看出,上下文不同输出的结果是不一样的。
分享到:
相关推荐
### JS上下文理解 #### 一、什么是JS执行上下文?...通过以上分析,我们可以更深入地理解JavaScript中执行上下文的概念及其如何影响变量的作用域和访问。理解这些基础概念对于掌握JavaScript编程至关重要。
JavaScript中的作用域、执行上下文和闭包是理解JavaScript运行机制的关键概念。本文将深入探讨这些概念,并通过实例解析它们的工作原理。 首先,我们来看**词法作用域**。JavaScript遵循词法作用域规则,意味着变量...
1. **上下文与`this`**:`this`的值在JavaScript中取决于函数的调用方式。当函数作为对象的方法调用时,`this`指向调用该方法的对象。例如: ```javascript var obj = { foo: function() { alert(this === obj);...
执行上下文可以理解为当前 JavaScript 代码被评估和执行时的一个环境,其中包含了变量、函数声明、作用域链以及 `this` 的值。函数堆栈则描述了函数调用时的顺序和结构,而变量提升则是 JavaScript 中的一个特殊机制...
作用域决定了变量的可见性和生命周期,而上下文则与`this`关键字的值有关,它指定了当前执行代码的对象。 **变量作用域**: 在JavaScript中,变量可以存在于全局作用域或局部作用域。全局变量在整个程序运行期间都...
执行上下文是JavaScript引擎在解析和运行...总的来说,执行上下文的概念帮助我们理解JavaScript如何管理变量作用域、函数调用以及代码的执行顺序。深入理解执行上下文对于编写高效、无bug的JavaScript代码至关重要。
JavaScript作用域是编程中至关重要的概念,它规定了变量和函数的可见性及生命周期。JavaScript主要有两种作用域:全局作用域和局部作用域。 全局作用域是指在代码的任何位置都可以访问的变量或函数,这通常包括在最...
1.当代码执行的时候,首先生成一个全局执行上下文(global EC) 2.当执行到函数作用域时,全局执行上下文(caller)会触发该函数执行上下文(call
JavaScript中的执行上下文和调用堆栈是理解JS运行机制的关键概念。执行上下文是代码在特定环境中运行的抽象表示,它定义了变量、函数以及`this`关键字的行为。执行上下文主要有三种类型:全局执行上下文(默认的运行...
- 当在函数内部试图访问一个变量时,JavaScript会沿着作用域链从当前执行上下文的AO开始查找。如果找不到,就向上层AO查找,直至全局GO。如果全局GO也找不到,就会引发`ReferenceError`。 5. **闭包**: - 当一个...
作为一个前端开发人员,弄清楚JavaScript的执行上下文有助于我们理解js中一些晦涩的概念,比如闭包,作用域,变量提升等等。 执行栈 执行栈用于存储代码执行期间创建的所有执行上下文。具有FILO接口,也被称为调用...
主要介绍了Javascript中的作用域和上下文深入理解,本文讲解了作用域 VS 上下文、变量作用域、“this”上下文、执行上下文(Execution Context)、作用域链等内容,需要的朋友可以参考下
### JS的作用域与闭包 #### 一、作用域的基础概念 作用域是JavaScript中一个非常核心的概念,它定义了变量的可见性和生命周期。在学习作用域之前,我们需要先了解几个基本概念: - **变量**: 在JavaScript中,...
JavaScript是Web开发中不可或缺的一部分,其核心概念包括代码的作用域和执行上下文。这两个概念对于理解和编写高效、无错误的JavaScript代码至关重要。 首先,我们来深入理解“作用域”。在JavaScript中,作用域...
理解执行上下文和执行栈对于深入学习JavaScript至关重要,因为它涉及到作用域、闭包、异步操作等复杂概念。例如,闭包是由函数和其相关的引用环境组合而成的实体,它能访问并操作其父函数的变量,即使父函数已经执行...