`

Javascript中作用域和上下文

 
阅读更多
     函数可以被多个上下文所使用,作用域可以被封装或保护。每一个函数调用都联系着一个作用域和一个上下文。根本上说,作用域是基于函数的而上下文是基于对象的
先看几个术语的解释:

变量作用域

变量能够被定义在局部或者全局作用域,这导致运行时变量的访问来自不同的作用域。
   全局变量:声明在函数体外,在整个运行过程中都存在,能在任何作用域中访问和修改。
   局部变量:仅在函数体内定义,每次被调用都将产生一个新的作用域。

另: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中,作用域和上下文是理解代码执行逻辑的关键概念。作用域指的是变量和函数的可见性和生命周期,而上下文则关乎`this`关键字的值,它指示了当前代码执行的环境。 **作用域(Scope)** 1. **全局作用域**...

    Javascript中的作用域和上下文深入理解

    Javascript中的作用域和上下文的实现是Javascript语言独有的特性,从某种程度上来说,Javascript语言是十分灵活的。Javascript中的函数可以采用各种各样的上下文,作用域也可以被封装和保存。正是由于这些特性,...

    深化浅析JavaScript中的作用域和上下文_.docx

    JavaScript中的作用域和上下文是编程时必须理解的关键概念,特别是在JavaScript这种动态类型的脚本语言中。作用域决定了变量的可见性和生命周期,而上下文则与`this`关键字的值有关,它指定了当前执行代码的对象。 ...

    深入理解JavaScript作用域和作用域链

    JavaScript作用域是编程中至关重要的概念,它规定了变量和函数的可见性及生命周期。JavaScript主要有两种作用域:全局作用域和局部作用域。 全局作用域是指在代码的任何位置都可以访问的变量或函数,这通常包括在最...

    JavaScript中作用域链的概念及用途讲解

    JavaScript中的作用域链是编程中一个至关重要的概念,它决定了变量和函数的可访问性以及在不同作用域内的查找顺序。在深入理解作用域链之前,我们首先要了解什么是执行环境和变量对象。 执行环境,简单来说,就是...

    js上下文理解

    变量对象负责管理该上下文中所有的变量和函数声明。变量对象实际上并不是一个普通的JavaScript对象,而是一个由引擎维护的内部结构。 - **全局执行上下文的变量对象**:全局执行上下文中,变量对象通常是`window`...

    javascript中的作用域和上下文使用简要概述

    在JavaScript中,变量名冲突是通过作用域链解决的,即在当前执行上下文中找不到变量时,会继续向上遍历作用域链。此外,闭包(Closure)是一个非常重要的概念,它允许一个函数访问并操作函数外部的变量。这是通过...

    浅析JavaScript作用域链、执行上下文与闭包

    JavaScript中的作用域、执行上下文和闭包是理解JavaScript运行机制的关键概念。本文将深入探讨这些概念,并通过实例解析它们的工作原理。 首先,我们来看**词法作用域**。JavaScript遵循词法作用域规则,意味着变量...

    深入理解JavaScript作用域共12页.pdf.zip

    JavaScript作用域是编程中至关重要的概念,尤其是在JavaScript这种动态类型的脚本语言中。它规定了变量、函数以及其它标识符的可见性和生命周期,是代码组织和管理的关键元素。本资料"深入理解JavaScript作用域共12...

    深入了解JavaScript,优化作用域链(2).pdf

    在JavaScript编程中,作用域和作用域链是影响程序性能的关键因素之一。优化作用域链是提高JavaScript代码执行效率的重要手段。下面我们从多个方面来详细探讨作用域链的概念、作用域链的层级关系、变量访问的性能影响...

    Web前端面试题目JavaScript(作用域,原型。原型链,闭包,封装函数).txt

    前端面试题,包含JavaScript的闭包,作用域,原型,原型链,上下文环境以及DOM,BOM封装函数深度克隆,以及一些常见的·JS问题,试题简单但是容易混淆,作为前端工程师必考题

    Javascript中的作用域及块级作用域

     javascript的变量作用域,与平时使用的类C语言不同,例如C#中的代码: static void Main(string[] args) { if(true) { int number=10; } Console.WriteLine(number); }  这段代码进行编译,是无法通过的,...

    JavaScript中的作用域链和闭包

    在JavaScript中,作用域和闭包是两个非常重要的概念,它们对于理解和编写高效、可靠的代码至关重要。让我们深入探讨这两个主题。 首先,我们来看一下**作用域**。作用域决定了变量和函数在何处可以被访问。主要有两...

    javascript作用域链(Scope Chain)初探.docx

    ### JavaScript作用域链(Scope Chain)初探 #### 一、引言 JavaScript的作用域链是一个重要的概念,尤其是在深入理解JavaScript执行机制时不可或缺的一部分。本文将通过对几个具体例子的分析来探讨JavaScript作用域...

Global site tag (gtag.js) - Google Analytics