对js闭包的学习

来源:互联网 发布:淘宝写论文靠谱吗 编辑:程序博客网 时间:2024/05/17 01:44

    由于是JAVA出身, 编程习惯于面向对象, 总是对类这个东西有着执念( 真爱)!
    开始接触js, 写着这样的代码


    function f() {
        点点点
    }


    function d() {
        点点点
    }
    总感觉函数式的语言是不是少了什么, 于是Google一番, 才知道原来是自己见识短浅。。。
    js的灵活程度之高让晚辈无法想象, 于是代码变成了这样
    var a = function() {}
    a.prototype.start = function() {}
    a.prototype.end = function() {}
    这就有点面向对象编程的习惯了, 出现了类!
    如果喜欢封装, 那代码就变这样了、
    var a = function() {}
    a.prototype = {
        start: function() {},
        end: function() {},
    }
    终于要讲到闭包了, 在js中, 函数是一等对象,
    他们可以储存可以作为参数传给其他函数, 还可以作为返回值传从其他函数传出,
    甚至可以在运行时进行构造。 可是有一个问题就迎面而来, 既然js是函数式语言,
    那么局部变量的值如何在另一个函数中去使用呢, 总不能所有变量都是全局变量--/
    于是有了这样的代码
    var scope = "123";
    var a = function checkscope() {
        var scope = 12;


        function f() {
            var scope = 13;
            return d;
        }


        function d() {
            var scope = 14;
            return scope;
        }
        return d;
    }
    a()();
    运行结果是14, 闭包就这么悄无声息的来了。
    js的链特性让d函数链下的scope值在有了return后不会被垃圾回收清理,
    一直存在的链式特性就是闭包实现的精华所在, 可能习惯了java的同学会
    一时难以接受这个事实, 平时天下无敌的gc() 大哥居然。。。!。。。!
    不去考虑底层, 这里的难题还有作用域。 this的使用。。 js的易变性。。 继承等等等
    0 - 0! 搞局dota下次聊


0 0