js闭包的问题

<!doctype html>

<html>


<head>

</head>

<body>

    <script type="text/javascript">

    <!-- 在正常的脚本中,某个方法可以获取到外部的变量,或者全局变量 -->

    var num = 11;

    function func1(){

        console.log(num);

    }

    func1();


    <!-- 但是在外部是无法获取方法内部的局部变量的 -->

    function func2(){

        var num1 = 22;

        num2 = 33;

    }

    func2();

    <!--console.log(num1);  会报错!-->

    console.log(num2); <!--可以获取到num2的值,因为不适用var定义变量时,默认是全局变量 -->


    <!-- 那么如何在外部获取到内部的变量呢!javascript可以办到 -->

    function func3(){

        var num3 = 44;

        function func4(){

            return num3;

        }

        return func4;

    }

    var func = func3();

    console.log(func());


    </script>

</body>

</html>


第三个中...为什么不直接return num3呢。。。

在外面包一个func4有什么区别。。。。。。不都是返回num3吗。。求大神解惑。。这各问题把我弄蒙了


哔哔one
浏览 385回答 1
1回答

慕仙森

1、如果你所有的变量都定义在最外层,也就是window环境下,你要想一想,如果程序变得越来越大,你一个不小心就把某一个变量修改了,bug很难定位2、闭包简单来说,就是内层函数能够访问到作用域链上的变量。你的例子太简单了,如果单单只返回值,怎么返回都没什么区别,但是如果你是暴露接口方法,使之能操作你函数里面的变量呢?这就又不一样了,只返回值你永远不能在外层对这个变量进行修改,相当于把你的变量封装了起来,外层不能改变他,也就解决了1里的问题3、如2中所说,你可以function func3 () {&nbsp; &nbsp; var num = 1&nbsp; &nbsp; function add () {&nbsp; &nbsp; &nbsp; &nbsp; num++&nbsp; &nbsp; }&nbsp; &nbsp; function getNum () {&nbsp; &nbsp; &nbsp; &nbsp; return num&nbsp; &nbsp; }&nbsp; &nbsp; return {&nbsp; &nbsp; &nbsp; &nbsp; add: add,&nbsp; &nbsp; &nbsp; &nbsp; getNum: getNum&nbsp; &nbsp; }}var t = func3()t.add()t.getNum()这样是不是就封装了一些操作了,也变得更加有意义呢?例子还是太简单,只是说明对变量的封装。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript