温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JavaScript作用域的示例分析

发布时间:2021-11-14 17:59:33 来源:亿速云 阅读:144 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关JavaScript作用域的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

    作用域

    作用域(Scope)简单的说就是变量,函数和对象定义后其可用的范围。

    console.log(a)
    {
        var a=1;
    }
    function test(){
         var b=2;
    }

    JavaScript作用域的示例分析

    可以看出在外面无法使用变量b。可以看出作用域可以保护数据不会被外部随意访问,以及修改。简单可以看出作用域可以相互隔离彼此的变量,也就是说在不同的作用域下的同名变量不会冲突。

    而作用域最重要常用的是全局作用域和函数作用域。不过ES6之后因为let 和const关键字的出现又引如了一个块级作用域。

    全局作用域

    全局作用域简单说就是所有域都可以访问器域下变量以及方法对象。

    var a="全局1";
     function test(){
        b="没有带var,隐式转变为全局变量";
        window.c="直接将变量c作为window下也会变全局";
        var d="非全局作用域";
     }
     #第一步 执行test()
    test()  #这样才会将方法内的变量进行定义以及赋值
    #第二步
    console.log(a)
    console.log(b)
    console.log(c)
    console.log(d)

    JavaScript作用域的示例分析

    一般来说window的属性都是全局变量,而window.c 其实式将c作为一个window的属性来对待。注意一点在声明变量的时候不要带var ,最好是带着var,这样不会将其提升成全局变量,导致数据会被相互污染。

    补充说一句,test这个方法也是全局域下的方法。

    function test(){
        var a= function(){
            console.log("字面量的方法")
        }
        b=function(){
            console.log("不带var字面量的方法")
        } 
       function test1(){
           console.log("普通声明方法")
       }
         
    }

    JavaScript作用域的示例分析

    这个可以看出字面量声明的方法,类似一个可以看成一个将函数赋值给一个变量,将其作为一个变量来对待。前面预编译的时候也演示过了。

    函数作用域

    函数作用域与全局作用域相反,其不是为所有的地方用,而是在一定的范围用,一般声明的变量,只在函数内部使用。

    function test(){
         var a="非全局作用域";
         console.log(a)
    }

    现在又有了一个问题,全局方法里面可以用函数作用域内部的变量。那么函数是内部是否可以有其下面的函数生成的函数作用域呢?以及其变量是否可以相互用?

    function test(){
         var a="test方法作用域";
        function test1(){
             var b="test1方法作用域";
            console.log("a的值=",a);
        }
        # 调用函数内部函数
        test1();
         console.log("b的值=",b);
     }

    JavaScript作用域的示例分析

    这个地方可以看出作用域是分层的,内层作用域可以访问外层作用域的变量,外部访问不了内部的变量。

    if,switch,for ,while

    条件语句和逻辑循环,**它们不是函数同样也不像函数,也不会创建一个新的作用域。**其块定义的变量将保留在它们存在的作用域中。

    function test(a){
        if(a>1){
            var b=13;
        }else{
           var b=1;  
        }
        console.log(b);
    }

    JavaScript作用域的示例分析

    所以在使用条件语句和逻辑循环的时候,尽可能不要再全局作用域下使用。因为其方法体中的变量会影响其他的数据。

    块作用域

    块作用域的出现,一般需要依赖两个关键字let或const之一,不然就不会存在这个块作用域。

    JavaScript作用域的示例分析

    function test(a){
        const b="23";
        if (a>2){
            const c=3
            console.log("第一个人if---c-----",c)
        }
        if (a>1){
            console.log("第二个人if----b----",b)
            console.log("第二个人if----c----",c)
        }
         
    }

    JavaScript作用域的示例分析

    可以看出如果有关键字let和const后,其变量的范围就是在其声明的那一对花括号内。所以第一个if中的c变量再第二个if的里面无法取得。当然还是遵守:内层作用域可以访问外层作用域的变量。

    了解let和const看前一篇:地址

    作用域链

    这个看似很神奇的概念,简单的说就是作用域内有就直接用,没有找上一层,如果都没有,找到全局就结束。

    var a=1
    var b=3
    function test(){
        var a=2
        console.log("a的值",a);
        console.log("b的值",b);
    }

    JavaScript作用域的示例分析

    感谢各位的阅读!关于“JavaScript作用域的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI