• 深入浅出:JavaScript作用域链


      1. 什么是作用域

    任何程序设计语言都有作用域的概念,简单的说,作用域就是变量的作用范围。

      2. 变量的分类和变量作用域的分类

    在JavaScript中,变量分为全局变量和局部变量,与此相对应的,变量的作用域有全局作用域和局部作用域两种。

      3. 全局变量和全局作用域

      在函数外声明的变量为全局变量,全局变量所对应的作用域为全局作用域。看如下代码:

    var globalEle = "世界这么大";
    function func(){
        console.log("函数内部:" + globalEle);
    }
    func();
    console.log("函数外部:" + globalEle);

      打印结果:

      结果分析:

      在函数外部声明了一个变量globalEle,因此它为全局变量,拥有全局作用域,全局变量无论在函数内部还是函数外部都可以被访问。

      4. 局部变量和局部作用域

      在函数内声明的变量为局部变量,局部变量所对应的作用域为局部作用域。看如下代码:

    function func(){
        var localEle = "而我在国内"
        console.log("函数内部:" + localEle);
    }
    func();
    console.log("函数外部:" + localEle);

      打印结果:

      结果分析:

      在函数内部声明了一个变量localEle,因此它为局部变量,拥有局部作用域,局部变量只能在当前声明的函数内起作用,因此在函数外访问局部变量会提示not defined。

      5. 什么是作用域链

      作用域链的建立过程此处不详细讲,一些官网定义的抽象的概念也不多加以阐述,就通过下面的例子来看一下,看如下代码:

    var ele = "函数外面定义的变量";
    function func(){
        var ele = "函数func内定义的变量";
        function son(){
            var ele = "函数son内定义的变量";
            console.log(ele);
        }
        son();
    }
    func();

      打印结果:

      结果分析:变量ele被定义了三次,但他们的作用域不同,第一次定义的ele是全局变量,拥有全局作用域。第二次定义的ele是局部变量,在函数func内起作用,因为函数son是函数func的子函数,所以在函数son内也可以访问到这里定义的变量。第三次定义的ele也是局部变量,在函数son内部起作用。所以,在函数son内部访问变量ele也就是打印变量ele的时候,会依照就近原则先去访问函数son内部的定义的变量ele,如果找不到会一层层网上找,直到最上面一层,如果依旧找不到会提示not defined。希望你能通过这个简单的案例理解作用域链。

      好啦,就说这么多咯,以上说法有不严谨之处还请各位指正,祝工作愉快!

      

      

  • 相关阅读:
    dedecms文章标题是在哪个数据库表?要批量替换关键词
    dedecms首页调用的简介一直修改不了是自动文章摘要在作怪
    如何进行微信营销?玩转微信公众平台营销理论手册
    用了那么久居然没发现firefox快捷键有如此多
    保护隐私:清除cookie、禁用cookie确保安全【分享给身边的朋友吧】
    如何更改firefox默认搜索引擎?一步搞定!
    微信红包中使用的技术:AA收款+随机算法
    马年添加一下马蹄印记统计(网站统计)
    今天上完就放假了,马年见
    三种dedecms调用相关文章的方法
  • 原文地址:https://www.cnblogs.com/gaohuijiao/p/7701187.html
Copyright © 2020-2023  润新知