欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

javascript匿名函数之闭包3

程序员文章站 2022-03-02 12:06:54
...
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>js01_hello</title>
    <meta name="author" content="Administrator" />
    <script type="text/javascript">
        /**
         * 通过以下操作带来最大的好处是,compareObjectFunction的作用域变大了
         * 当compareObjectFunction结束之后,prop这个变量依然存在
         */
        function compareObjectFunction(prop) {
            //匿名函数
            return function(obj1,obj2) {
                if(obj1[prop]>obj2[prop]) return 1;
                else if(obj1[prop]<obj2[prop]) return -1;
                else return 0;
            }
        }
        var o1 = {name:"Leon",age:23};
        var o2 = {name:"Ada",age:28};
        //此时就是基于name来进行比较
        /*
         * 在java或者c++中,以下代码执行完成之后,需要进行内存的释放
         * 此时对于java和c++这些静态语言而言,prop会被释放
         * 但是在js中,这个作用域却被放大了
         */
        var compare = compareObjectFunction("age");
        //此时就比较了o1和o2
        /*
         * 在js中,prop在这里依然可以被访问,这种通过返回函数来扩大函数的作用域的方法
         * 就是闭包
         */
        var rel = compare(o1,o2);
        alert(rel);
    </script>
</head>
<body>
</body>
</html>