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>

时间: 2024-10-19 09:50:13

javascript学习笔记06的相关文章

JavaScript学习笔记【3】数组、函数、服务器端JavaScript概述

笔记来自<JavaScript权威指南(第六版)> 包含的内容: 数组 函数 服务器端JavaScript概述 数组 数组是动态的:根据需要它们会增长或缩减,并且在创建数组时无须声明一个固定的大小或在数组大小变化时无须重新分配空间. 数组可能是稀疏的:索引不一定要连续的,它们之间可以有空缺. 通常,数组的实现是经过优化的,用数字索引来访问数组元素一般来说比访问常规的对象属性要快很多. 数组继承自Array.prototype中的属性,它定义了一套丰富的数组操作方法. 如果省略数组直接量中的某个

Javascript 学习笔记 2: 标识语句

可以在任何语句声明之前使用唯一标识(identifier)和冒号(:)用来标记该语句: identifier: statement 这样,你可以在程序的任何其他地方通过标识来使用这个语句.即使在语句内部也可以使用该语句的标识(例如:循环语句和条件语句).当在一个循环语句前添加一个标识,你可以在语句内部通过break 标识来退出当前循环,也可以通过continue标识来继续执行该语句.例如: mainloop: while(token != null) { // Code omitted... c

javascript学习笔记---ECMAScript-判断变量类型

判断类型之前,先要清楚有哪些类型. (理理思路:程序由数据和方法构成,数据由简单数据和复杂数据构成) 即类型有: 数据(简单数据:boolean,string,num,undefined,null.复杂数据:object), 方法(function) 万能的typeof,神一样的方法 typeof(1);// num typeof("hello");// string   typeof(false);// boolean var vFlag; typeof(vFlag);// unde

javascript学习笔记---ECMAScript语法(引用类型)

引用类型通常叫做类(class). 本教程会讨论大量的 ECMAScript 预定义引用类型. 引用类型 引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象. 本教程会讨论大量的 ECMAScript 预定义引用类型. 从现在起,将重点讨论与已经讨论过的原始类型紧密相关的引用类型. 注意:从传统意义上来说,ECMAScript 并不真正具有类.事实上,除了说明不存在类,在 ECMA-262 中根本没有出现"类"这个词.ECMAScript 定义了"对象定

javascript学习笔记---ECMAScriptECMAScript 对象----定义类或对象

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 原始的方式 因为对象的属性可以在对象创建后动态定义(后绑定),类似下面的代码: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };不过这里有一

javascript学习笔记---ECMAScriptECMAScript 对象----修改对象

通过使用 ECMAScript,不仅可以创建对象,还可以修改已有对象的行为. prototype 属性不仅可以定义构造函数的属性和方法,还可以为本地对象添加属性和方法. 创建新方法 通过已有的方法创建新方法Number.prototype.toHexString = function() { return this.toString(16); }; 在此环境中,关键字 this 指向 Number 的实例,因此可完全访问 Number 的所有方法.有了这段代码,可实现下面的操作: var iNu

javascript学习笔记——如何修改&lt;a href=&quot;#&quot;&gt;url name&lt;/a&gt;

0.前言 使用了一段时间javascript,再花了点时间学习了jquery,但是总是感觉自己很"迷糊",例如<a href="#">url name</a>中,如果修改href中的"#"应如何编写代码,如果修改url name应如何编写代码.再加上javascript和jquery操作方法略有不同,所以我就更"迷糊"了. [说明] 曾经使用关键词--"innerHTML和value区别&qu

javascript学习笔记---ECMAScript语法(辅助)

1.区分大小写. test与Test变量是两个不同的变量 2.变量是弱变量. 与C,java等等语言变量不是很一样. 如下java代码 ? 1 2 3 4 int i =0; //再次赋值 i = 10;//ok i = "hello";//wrong 类型不匹配 javascript ? 1 2 3 4 var i = 9; //再次赋值 i = 10;//ok i = "hello";//ok 但是不建议这么干,如此会给开发造成干扰,不明确变量的类型.(变量命名

javascript学习笔记---ECMAScript语法(变量)

变量声明关键字var: var i = 1: var t = "asd"; var test1 = "hi", test2 = "hello"; 声明变量不一定要初始化, var i;//ok 另一方面在使用变量前若未加关键字var,则此变量为全局变量(此特性需特别记住). 变量名字: 变量名需要遵守两条简单的规则: 第一个字符必须是字母.下划线(_)或美元符号($) 余下的字符可以是下划线.美元符号或任何字母或数字字符 命名变量规则: Came