码迷,mamicode.com
首页 > 编程语言 > 详细

javascript学习笔记06

时间:2015-05-21 08:59:24      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

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

<!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>

javascript学习笔记06

标签:

原文地址:http://www.cnblogs.com/canceler/p/4518749.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!