闭包闭包闭包 还是不懂闭包

发布于 2022-09-04 21:55:40 字数 1296 浏览 17 评论 0

闭包闭包 还是不懂啊。求解释。

        var fwx = (function(){
            var i = 0;
            var a = 1;
            var b = 2;
            var c = function (m) {var a = m;
                 a = m;
                console.log(i++);
              //  i = null;
            };
            var d = function () {
                var v  = a;
                console.log("。。。。"+a);
                console.log(i++);

                console.log(this.i);
                return v;
            };

            return {
                i : i ,
                a : a ,
                c : c ,
                d : d
            }
        })();

        console.log(fwx.i+"+"+fwx.a,
                fwx.d()+"+"+fwx.i,
                fwx.d()+"+"+fwx.i,

                fwx.c(111)+"+"+fwx.i,

                fwx.d()+"+"+fwx.i,
                fwx.d()+"+"+fwx.i,
                fwx.d()+"+"+fwx.i,
                fwx.a
        );

clipboard.png

clipboard.png

1.c方法中的闭包域中有 a、i
那么该a和fwx.a 有什么区别?

2.我该如何清楚闭包?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

夏の忆 2022-09-11 21:55:40

闭包就是函数可以访问其声明时所在作用域内的变量,根据这个特性可以在函数内返回一个函数,通过这个被返回的函数可以在函数外部访问函数内的变量;
根据作用域链,当函数访问变量时先在自身作用域内查找,若没有则向外层函数的作用域查找,依此类推,直到找到全局作用域为止,因为c函数作用域内有a,所以c函数内的a和fwx的a并不一样,而i是fwx内的i

凌乱心跳 2022-09-11 21:55:40

推荐个关于闭包的文章,通过chrome开发者工具理解闭包。

等往事风中吹 2022-09-11 21:55:40

首先,闭包是只有涉及嵌套函数时才有闭包的问题, 闭包是指延伸了作用域的函数,其中包含函数定义体中的引用,但是不在定义体中定义的非全局变量,只要这个函数能够访问定义体之外的非全局变量,我们就说该函数实现了闭包。
以python为例:

def make_averager():
    series = []
    def averager(new_value):
        series.append(new_walue)
        total = sum(series)
        return total/len(series)       
   return averager   

其中 series=[]...return total/len(series)这段被称为闭包,series为自由变量,显然series不是全局变量也没有在averager中定义,但是averager能够访问它 我们就说averager实现了闭包

独夜无伴 2022-09-11 21:55:40

做多少这种题都没啥用,直接做项目,做着做着你就明白了。

骷髅 2022-09-11 21:55:40

《你不知道的javascript》 看一下这本书,可以理解的更深一点

墨落画卷 2022-09-11 21:55:40

我比较赞同一种说法:前端要一步步来,你不可能越级打怪的。
你要写过一些代码,有一些自己的想法,再看就好懂了,在此之前,多看多写,别无他法。
我是c++出身的,刚看也一脸蒙逼,从最开始看到懂过了一年多。
http://user.qzone.qq.com/2084...
上面是我自己写的一篇文,结和了阮一峰和知乎上一位答友的回答,还有网上其它博客写的一篇日志,希望对你有帮助

生寂 2022-09-11 21:55:40

我的理解是:函数对其词法环境的引用 的组合。常用来间接地访问一个变量。当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这时就产生了闭包。

详细深入理解可以看下我的文章javaScript中的闭包

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文