js中 局部变量、全局变量、闭包

一、局部变量
什么是局部变量呢,我们先通过下面的代码了解一下

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript">
            function aa(){
                var a=88;
                //局部变量,只在aa()函数体里面起作用。
            }
            function bb(){
                alert(a);
            }
            bb();
        </script>
    </head>
    <body>
    </body>
</html>

现在有两个函数aa(),bb();我现在调用函数bb()想让他弹出a的值。结果什么都没有。
这不是程序的问题,而实际是作用域的问题。
现在a;只在函数aa()中有作用,那么这个a就是局部变量。
那么如果函数bb()也要弹出a的值得话就得

function bb(){
                var a=88;
                alert(a);
            }

这样函数bb()也能弹出a的值88了, 不过现在的a和上面函数里面的是不一样的。

二、全局变量
那么有局部变量肯定是有全局变量的。
所谓的全局变量,就是说他的作用域更大,比如:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript">
            var a=1314;
            function aa(){
                alert(a);
            }
            function bb(){

                alert(a);
            }
            bb();
        </script>
    </head>
    <body>
    </body>
</html>

现在的话a的值在外面,下面的函数aa(),bb()调用的时候都能弹出a的值。这个就就做全局变量。
但是这个很少用,尽量别用。就比如还是上面的函数但是多加个

var a=1314;
            function aa(){
                var a=520;
                alert(a);
            }

这个时候在调用函数aa()的时候弹出的就是他内部的520,而不是外部的1314了,所以说在实际应用中很容易重名,这样就会有影响。当然了如果只用一个名字,的时候也是可以用了。

三、闭包

闭包可以理解为子函数使用父函数 的全局变量。
这个在实际应用中是经常用到的,我就举个例子说明吧

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            #box{width: 200px;height: 200px;background: red;}
        </style>
        <script type="text/javascript">
            window.onload=function(){
            //父函数
                var oBox=document.getElementById("box");
                oBox.onmouseover=function(){
                //子函数
                    oBox.style.background='blueviolet';
                    //oBox 是在外面函数中声明的,但是在这个函数中可以使用
                }
                oBox.onmouseout=function(){
                    oBox.style.background='red';
                }
            }
        </script>
    </head>
    <body>
        <div id="box"></div>
    </body>
</html>

当函数里面有函数,我们就能把外面的函数就是父函数,里面的函数就是子函数。
当我想改变这个box的背景色,首先要在函数中找到这个box,只在父函数中声明,但是在子函数中我们仍然可以调用。这就是闭包,(子函数使用父函数的全局变量);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值