`
tinalucky
  • 浏览: 7894 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

JS的作用域与执行上下文

阅读更多
作用域和执行上下文,很多人容易把它们混淆,在这简单地做个比较。
作用域是函数定义的时候就确定好的了,函数当中的变量是和函数所处的作用域有关,函数运行的作用域也是与该函数定义时的作用域有关。
上下文,主要是相对于关键字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是能改变上下文的。
从上面可以看出,上下文不同输出的结果是不一样的。
分享到:
评论

相关推荐

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

    JavaScript 采用词法作用域(lexical scoping),函数执行依赖的变量作用域是由函数定义的时候决定,而不是函数执行的时候决定,通过本文给大家介绍JavaScript作用域链、执行上下文与闭包相关知识,感兴趣的朋友一起...

    JavaScript 变量提升 | 执行上下文 | 作用域

    文章目录变量提升执行上下文全局执行上下文函数执行上下文执行上下文栈作用域例题举个栗子 执行上下文栈:举个栗子 变量提升+执行上下文栈:举个栗子 预处理顺序举个栗子 预处理举个栗子 顺序执行举个栗子 作用域举...

    xd-tayde#blog#JavaScript语言编程核心(三)—执行上下文与作用域1

    1.当代码执行的时候,首先生成一个全局执行上下文(global EC) 2.当执行到函数作用域时,全局执行上下文(caller)会触发该函数执行上下文(call

    一篇文章弄懂javascript中的执行栈与执行上下文

    作为一个前端开发人员,弄清楚JavaScript的执行上下文有助于我们理解js中一些晦涩的概念,比如闭包,作用域,变量提升等等。 执行栈 执行栈用于存储代码执行期间创建的所有执行上下文。具有FILO接口,也被称为调用...

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

    主要介绍了Javascript中的作用域和上下文深入理解,本文讲解了作用域 VS 上下文、变量作用域、“this”上下文、执行上下文(Execution Context)、作用域链等内容,需要的朋友可以参考下

    图文详解Javascript中的上下文和作用域

    执行上下文(Execution context) 执行上下文(简称上下文)决定了Js执行过程中可以...需要注意的是,上下文与作用域(scope)是不同的概念。Js本身是单线程的,每当有function被执行时,就会产生一个新的上下文,这一

    520MianXiangDuiXiang520#Note#24-作用域与作用链1

    作用域与作用域链作用域类别全局作用域函数作用域块作用域:Es6时出现,之前没有作用域与执行上下文区别创建时机不同全局作用域外,每个函数都有自己的作用域,作用域在

    图解javascript作用域链

    先来一段简单的javascript代码: ...1.javascript引擎会在页面加载脚本被执行时为每个函数创建一个作用域(执行上下文)及作用域链。 2.javascript引擎在产生这些作用域后,会创建一个堆栈。 3.将onload对应的

    通过函数作用域和块级作用域看javascript的作用域链

    在ES6之前,javascript...在了解作用域链之前,我们先了解一个执行期上下文的概念。 执行期上下文:当函数执行时,会创建一个称为执行期上下文的内部对象(即AO或GO),一个执行期上下文定义了一个函数的执行环境,函数

    关于JS管理作用域的问题

    关键字:标识符、执行上下文、作用域、作用域链、变量对象、活动对象理论知识 理解JavaScript如何管理作用域和作用域链很重要。因为在作用域链中要查找的变量对象的个数直接影响标识符解析的性能。标识符在作用域链...

    javascript执行上下文、变量对象实例分析

    突然看到一篇远在2010年的老文,作者以章节的形式向我们介绍了ECMA-262-3的部分内容,主要涉及到执行上下文、变量对象、作用域、this等语言细节。内容短小而精悍,文风直白而严谨,读完有酣畅淋漓、醍醐灌顶之感,...

    详解JavaScript作用域和作用域链

    JavaScript 中有一个被称为作用域(Scope)的特性。虽然对于许多新手开发者来说,作用域的概念并不是很容易理解,本文我会尽我所能用最简单的方式来解释作用域和作用域链,希望大家有所收获! 作用域(Scope) 1. 什么是...

    JavaScript中的作用域链和闭包

    作用域 全局作用域 局部作用域 作用域链 执行上下文 活动对象 闭包 闭包优化 JavaScript中出现了一个以前没学过的概念——闭包。何为闭包?从表面理解即封闭的包,与作用域有关。所以,说闭包以前先说说作用域。 ...

    老生常谈原生JS执行环境与作用域

    首先,我们要知道执行环境和作用域是两个完全不同的概念。 函数的每次调用都有与之紧密相关的作用域和执行环境。从根本上来说,作用域是基于函数的,而...执行环境(也称执行上下文–execution context) 当JavaScript

    简单了解JavaScript中的执行上下文和堆栈

    你可以阅读大量涉及作用域的在线资料,不过为了使事情更容易理解,让我们将术语“执行上下文”视为当前代码的运行环境或作用域。接下来让我们看一个包含global和function / local上下文的代码示例。 这里没有什么...

    深入理解JavaScript 中的执行上下文和执行栈

    理解执行上下文和执行栈对于理解其他 JavaScript 概念(如变量声明提升,作用域和闭包)至关重要。 正确理解执行上下文和执行栈的概念将使您成为更出色的 JavaScript 开发者。 闲话少说,让我们开始吧 :slightly_...

    JavaScript核心(对象、原型、继承、上下文、闭包、this).pdf

    面向对象概念(对象封装,各种继承,闭包原理,this作用域等)介绍清晰易懂

Global site tag (gtag.js) - Google Analytics