zoukankan      html  css  js  c++  java
  • javascript学习笔记06

    函数,函数可以直接返回一个函数

    <!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">
        // function sum(num1,num2) {
            // return num1+num2;
        // }
        var sum = function(num1,num2) {
            return num1+num2;
        }
        
        // function sum(num1) {
            // return num1+100;
        // }
        /**
         * 此时sum所指向的空间已经从有两个参数的函数变化到只有num1的函数中
         * 在调用的时候就只会调用只有num1的函数
         * 特别指出:函数的参数和调用没有关系,如果函数只有一个参数,但是却传入
         * 了两个参数,仅仅只会匹配一个
         * 所以在js中函数不存在重载
         */
        var sum = function(num1) {
            return num1+100;
        }
        
        //函数有如下一种定义方式
        /**
         * 如下定义方式等于定义了一个
         * function fn(num1,num2){
         *       alert(num1+num2);
         * }
         * 所以通过以下的例子,充分的说明函数就是一个对象
         */
        var fn = new Function("num1","num2","alert('fun:'+(num1+num2))");
        fn(12,22);
        alert(sum(19));
        
        alert(sum(19,20));
        </script>
    </head>
    <body>
    </body>
    </html>

    <!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">
        /**
         * 由于函数是对象,所以可以直接把函数通过参数传递进来
         */
        function callFun(fun,arg) {
            //第一个参数就是函数对象
            return fun(arg);
        }
        
        function sum(num) {
            return num+100;
        }
        
        function say(str) {
            alert("hello "+str);
        }
        //var say = xxx
        //调用了say函数
        callFun(say,"Leon");
        //调用了sum函数
        alert(callFun(sum,20));
        
        function fn1(arg) {
            /**
             * 此时返回的是一个函数对象
             */
            var rel = function(num) {
                return arg+num;
            }
            return rel;
        }
        //此时f是一个函数对象,可以完成调用
        var f = fn1(20);
        alert(f(20));
        alert(f(11));
        </script>
    </head>
    <body>
    </body>
    </html>

    函数,函数可以直接返回一个函数,来灵活实现函数排序

    <!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" />
        
    </head>
    <body>
        <div id="person"></div>
        <script type="text/javascript">
        /**
         * 根据数字来进行排序的函数
         */
        // function sortByNum(a,b) {
            // return parseInt(a)-parseInt(b);
        // }
        // alert("11"+1);
        // //当进行减法的时候,会自动完成转换
        // alert("11"-1);
        // var as = [1,2,"11px",33,"12px",190];
        // //对于js而言,默认是按照字符串来进行排序的
        // as.sort(sortByNum);
        // alert(as);
        
        //测试根据对象排序
        function Person(name,age) {
            this.name = name;
            this.age = age;
        }
        var p1 = new Person("Leno",39);
        var p2 = new Person("John",23);
        var p3 = new Person("Ada",41);
        var ps = [p1,p2,p3];
        // ps.sort(sortByAge);
        //p1.name,p1["name"]
        /**
         * 使用以下方法来处理排序,带来的问题是需要为每一个属性都设置一个函数,显然不灵活
         * 但是如果通过函数的返回值调用就不一样了
         */
        // function sortByName(obj1,obj2) {
            // if(obj1.name>obj2.name) return 1;
            // else if(obj1.name==obj2.name) return 0;
            // else return -1;
        // }
        // function sortByAge(obj1,obj2) {
            // return obj1.age-obj2.age;
        // }
    //     
        ps.sort(sortByProperty("age"))
        function sortByProperty(propertyName) {
            var sortFun = function(obj1,obj2) {
                if(obj1[propertyName]>obj2[propertyName]) return 1;
                else if(obj1[propertyName]==obj2[propertyName])return 0;
                else return -1;
            }
            return sortFun;
        }
        function show() {
            var p = document.getElementById("person");
            for(var i=0;i<ps.length;i++) {
                p.innerHTML+=ps[i].name+","+ps[i].age+"<br/>";
            }
        }
        show();
        </script>
    </body>
    </html>

  • 相关阅读:
    Game Engine Architecture 3
    Game Engine Architecture 2
    补码
    工厂模式
    Game Engine Architecture 1
    YDWE Keynote
    3D Math Keynote 4
    3D Math Keynote 3
    3D Math Keynote 2
    OGRE中Any 类型的实现
  • 原文地址:https://www.cnblogs.com/canceler/p/4518749.html
Copyright © 2011-2022 走看看