精华内容
下载资源
问答
  • js作用域链概念
    2018-10-26 10:39:45

    概念

    作用域链就是用来保证执行环境里有权访问的变量和函数是有序的,变量只能向上访问,访问到window对象即被终止,不允许向下访问变量

    更多相关内容
  • (1)作用域 一个变量的作用域(scope)是程序源代码中定义的这个变量的区域。 1. 在JS中使用的是词法作用域(lexical scope) 不在任何函数内声明的变量(函数内省略var的也算全局)称作全局变量(global scope) 在...
  • 作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。任何程序...
  • 主要介绍了JavaScript作用域、闭包、对象与原型,结合实例形式总结分析了javascript中变量与函数的作用域、闭包、对象、原形相关概念、用法及注意事项,需要的朋友可以参考下
  • 在ES6之前,javascript...在了解作用域链之前,我们先了解一个执行期上下文的概念。 执行期上下文:当函数执行时,会创建一个称为执行期上下文的内部对象(即AO或GO),一个执行期上下文定义了一个函数的执行环境,函数
  • 虽然对于许多新手开发者来说,作用域的概念并不是很容易理解,本文我会尽我所能用最简单的方式来解释作用域和作用域链,希望大家有所收获! 作用域(Scope) 1. 什么是作用域 作用域是在运行时代码中的某些特定部分中...
  • 作用域和作用域链在Javascript和很多其它的编程语言中都是一种基础概念。但很多Javascript开发者并不真正理解它们,但这些概念对掌握Javascript至关重要。 正确的去理解这个概念有利于你去写更好,更高效和更简洁的...
  • 之前我写过一篇关于JavaScript中的对象的一篇文章,里面也提到了作用域链概念,相信大家对这个概念还是没有很深的理解,并且这个概念也是面试中经常问到的,因为这个概念实在太重要了,在我们平时写代码时,也可能...
  • JavaScript中出现了一个以前没学过的概念——闭包。何为闭包?从表面理解即封闭的包,与作用域有关。所以,说闭包以前先说说作用域
  • 作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。 ...
  • 作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。 ...
  • 闭包和作用域链是JavaScript中比较重要的概念,这两天翻阅了一些资料,把相关知识点给大家总结了以下。 JavaScript 采用词法作用域(lexical scoping),函数执行依赖的变量作用域是由函数定义的时候决定,而不是...
  • 程序设计中作用域概念: 通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。 词法作用域: 词法作用域,也叫静态作用域,它的作用域是指在词法...
  • 作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。 一、...
  • 主要介绍了javascript作用域链(Scope Chain)用法,结合实例形式较为详细的分析了javascript作用域链(Scope Chain)的概念、功能与相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 作用域链概念

    千次阅读 2019-12-04 21:47:00
    问:什么是作用域链? 答:作用域分为全局作用域和局部作用域,当声明了一个函数,函数内部就会形成一个局部作用域。 一个局部作用域都有上级作用域,上级作用域看的是函数声明。当函数调用时,会产生一个局部执行...

    问:什么是作用域链?

    答:作用域分为全局作用域和局部作用域,当声明了一个函数,函数内部就会形成一个局部作用域。  一个局部作用域都有上级作用域,上级作用域看的是函数声明。当函数调用时,会产生一个局部执行上下文(局部栈),多个局部栈上下文之间是没有关系的。在一个局部执行上下文中要完成形参的赋值、声明的提升、代码的执行。当执行代码时,如果访问一个变量x,先看这个变量是否是它自己上下文中的,如果是,变量x就是本上下文中的,如果不是则向上一级作用域中查找,不知查找一级,一直找到全局作用域,此时形成一个链,这个链叫作用域链(作用域链的查找机制)。

    例子:

    结果:

     

    展开全文
  • javascript 作用于作用域链的详解 一、JavaScript作用域 任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的...
  • 主要介绍了JavaScript词法作用域与作用域链,结合实例形式分析了JavaScript词法作用域与作用域链相关概念、原理与操作注意事项,需要的朋友可以参考下
  • 一、作用域 概念:变量和函数的可访问范围,控制着变量和函数的可见性与生命周期变量的作用范围 1、全局作用域(全局变量):在函数外部定义的变量或在函数内部没有使用var声明的变量。在浏览器页面没有关闭之前一直...

    一、作用域

    概念:变量和函数的可访问范围,控制着变量和函数的可见性与生命周期变量的作用范围

    1、全局作用域(全局变量):在函数外部定义的变量或在函数内部没有使用var声明的变量。在浏览器页面没有关闭之前一直占用内存空间。比较耗费内存。在浏览器页面关闭时才释放内存
    2、局部作用域(局部变量):在函数内部用var关键字定义的变量。只在函数内部起作用,函数调用结束后,局部变量所 占的内存就会被释放。

    var a=3; //全局变量
                function fn(b){ //局部变量
                    c=2; //全局变量
                    var d=5; //局部变量
                    function subFn(){
                        var e=d; //父函数的局部变量对子函数可见
                        for(var i=0;i<3;i++){
                            console.write(i);
                        }
                        alert(i);//3, 在for循环内声明,循环外function内仍然可见,没有块作用域
                    }
                }
                alert(c); //在function内声明但不带var修饰,仍然是全局变量

    举个例子:

    var scope = "global";
          function fn(){
             console.log(scope);//result:undefined
             var scope = "local";
             console.log(scope);//result:local;
          }
          fn();
    

     

    我们发现程序运行后第一个输出居然是undefined,我们以为它会访问外部的全局变量(scope = "global"),但是并没有。这可以算是javascript的一个特点:只要函数内定义了一个局部变量,函数在解析的时候都会将这个变量“提前声明”。

    var scope = "global";
          function fn(){
             var scope;//提前声明了局部变量
             console.log(scope);//result:undefined
             scope = "local";
             console.log(scope);//result:local;
          }
          fn();
    

    注意:在一些类C编程语言中花括号内的每一段代码都有各自的作用域,而且变量在声明它们的代码段外是不可见的,称之为块级的作用域:

    for(int i = 0; i < 10; i++){
    //i的作用范围只在这个for循环
    }
    printf("%d",&i);//error

    JavaScript容易让初学者误会的地方也在于此,JavaScript并没有块及的作用域,只有函数级作用域:变量在声明它们的函数体及其子函数内是可见的。

    for(var i = 1; i < 10; i++){
                //coding
          }
    console.log(i); //10  
    

    二、、作用域链:

    执行环境是JS中很重要的一个概念,执行环境定义了变量或者函数有权利访问的其他数据,决定了他们各自的行为。这些它有权利访问的数据都保存在一个叫变量对象的对象中。

    通俗的理解就是假如我写了一段JS代码,他可以放在浏览器中运行,也可以放在node中运行,浏览器环境和node环境就叫做执行环境。如果代码中还有一段函数,那在执行这个函数的时候,它可能会在浏览器执行环境下再新建一个小的空间容器充当这个函数的执行环境。所以一般有很多个执行环境,每个环境中有个对象存储这个执行环境中可访问的变量和函数等,这个对象就叫做变量对象。

    当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链就是执行环境中变量对象中变量和函数访问的顺序。举还是上面的例子,一段代码中有函数和变量,函数里面也包含变量和函数。作用域链就是定义一个函数的执行环境以及它的父级和祖父级执行环境的顺序。如果要查找一个变量,将会按照作用域链一级级向上寻找搜索。

    var s=0;
    function fun(t){
        console.log('t=',t)
        function f2(){      //函数的声明(定义)
            console.log('s=',s)
        }
        f2()        //函数的调用
    }
    fun(110)

     内部环境可以通过作用域链访问所有的外部环境,但是外部环境不可以访问内部环境中的任何变量和函数。这些环境的访问顺序是线性有次序的。

    延长作用域链就是在作用域链的前端增加一个变量对象。

    有两种情况可以达到这种效果:

    1. try-catch语句的catch块
    2. with语句

    上面两个语句都会在作用域的前端添加一个变量对象。对with语句来说,会将指定的对象添加到作用域中;对catch语句来说,会创建一个新的变量对象,其中包含的是被抛出的错误对象的声明。

    function buildUrl () {
       var qs = '?debug=true';
       with(location){
         var url = href + qs;
     }
       return url;
    }

    在上面的例子中,with语句接收的是location对象,因此其变量对象就包含了location对象的所有属性和方法,而这个变量对象被添加到了作用域的前端。buildUrl函数中定义了一个qs变量,当在with语句中引入变量href时,可以在当前执行环境的变量对象中找到。当引用变量qs时,引用的则是buildUrl中定义的变量,而该变量位于函数环境的变量对象中。至于with语句内部,则定义了一个名为url的变量,因而url就成了函数执行环节的一个部分,所以可以作为函数的值被返回。

    延长作用域的表现:这个函数中,他的作用域链就从 buildUrl的变量对象(前) => 全局的变量对象(后) 变成了 location的变量对象(前) => buildUrl的变量对象 => 全局的变量对象(后)这么一来,就在原始的作用域链中增加了一段作用域,所以就达到了延长的效果。

    展开全文
  • 作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理。今天这篇文章对JavaScript作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript。
  • 作用域、作用域链、执行环境、执行环境栈以及this的概念在javascript中非常重要,本人经常弄混淆,这里梳理一下; 局部作用域函数内部的区域,全局作用域就是window; 作用域链取决于函数被声明时的位置,解析...
  • JavaScript中有Scope(作用域),Scope chain(作用域链),Execute context(执行上下文),Active Object (活动对象),Dynamic Scope(动态作用域),Closure(闭包)这些概念,要理解这些概念,我们从静态和动态两个方面去...
  • 在ES 6之前,Javascript只有函数作用域概念,没有块级作用域(但catch捕获的异常 只能在catch块中访问)的概念(IIFE可以创建局部作用域)。每个函数作用域都是封闭的,即外部是访问不到函数作用域中的变量。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 117,334
精华内容 46,933
关键字:

作用域链的概念