美文网首页
作用域链(scope chain)

作用域链(scope chain)

作者: 易景平 | 来源:发表于2018-07-02 11:33 被阅读0次

为了更好的理解作用域链,先做些准备工作

1.作用域

在JavaScript中,我们可以将作用域定义为一套规则,这套规则用来管理引擎如何在当前作用域以及嵌套的子作用域中根据标识符(这里的标识符,指的是变量名或者函数名)名称进行变量查找。
javascript中的作用域有全局作用域和局部作用域两种,局部作用域又称为函数作用域。

全局作用域

在代码中任何地方都能访问到的对象拥有全局作用域

var a = "tsrot";
function hello(){
    alert(a);
}

function sayHello(){
    hello();
}

alert(a);     //能访问到tsrot
hello();      //能访问到tsrot
sayHello();   //能访问到hello函数,然后也能访问到tsrot

局部作用域(函数作用域)

局部作用域在函数内创建,在函数内可访问,函数外不可访问。

function hello(){
    var a = "tsrot";
    alert(a);
}

hello(); //函数内可访问到tsrot
alert(a); //error not defined

作用域链

函数在调用激活时,会开始创建对应的执行上下文,在执行上下文生成的过程中,变量对象,作用域链,以及this的值会分别被确定。

作用域链,是由当前环境与上层环境的一系列变量对象组成,它保证了当前执行环境对符合访问权限的变量和函数的有序访问。
作用域链指示了函数执行时按照什么样顺序去访问需要的变量,
具体过程如下例子:

var a = 20;

function test() {
    var b = a + 10;

    function innerTest() {
        var c = 10;
        return b + c;
    }

    return innerTest();
}

test();

在上面的例子中,全局,函数test,函数innerTest的执行上下文先后创建。我们设定他们的变量对象分别为VO(global),VO(test), VO(innerTest)。而innerTest的作用域链,则同时包含了这三个变量对象,所以innerTest的执行上下文生成的作用域链可如下表示。

VO(innerTest) ==> VO(test) ==> VO(global)

先在VO(innerTest)里面找到c,但没有找到b,于是向上一级找,在 VO(test)里面找到b,最后在全局VO(global)找到a
即函数在访问变量时,先在当前执行上下文寻找,找不到再向上一级寻找,直至全局上下文。

相关文章

  • 作用域链

    作用域链(scope chain) 理解: 作用域链决定了哪些数据能被函数访问。当一个函数创建后,它的作用域链会被...

  • 闭包

       本文分为(chang)几(pian)个(da)部(lun)分    作用域链(Scope chain)   ...

  • 2018-12-24

    JavaScript作用域链 当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain)来保...

  • 作用域链(scope chain)

    为了更好的理解作用域链,先做些准备工作 1.作用域 在JavaScript中,我们可以将作用域定义为一套规则,这套...

  • 作用域链(Scope Chain)

    JavaScript是基于词法作用域的语言:通过阅读包含变量定义在内的数行源码就能知道变量的作用域。全局变量在程序...

  • 作用域链(Scope Chain)

    在 JavaScript 中,函数也是对象,实际上,JavaScript 里一切都是对象。函数对象和其它对象一样,...

  • 【前端推荐第11天】作用域链

    今日推荐文章:《深入理解JavaScript系列:作用域链(Scope Chain)》 原文作者:汤姆大叔, 来源...

  • 作用域链与闭包

    作用域链 Scope Chain 作用域链是一条变量对象组成的链,与执行上下文有关,用于处理标识符时进行变量查询。...

  • JavaScript_05作用域链

    作用域链(Scope chain)。 在《JavaScript_03执行上下文栈》中讲到,当 JavaScript...

  • JS作用域链

    当代码在一个环境中执行的时候,会创建变量对象的作用域链(scope chain)作用域链的用途是:保证对执行环境...

网友评论

      本文标题:作用域链(scope chain)

      本文链接:https://www.haomeiwen.com/subject/omgayftx.html