深入函数
来源:互联网 发布:个人卖数据 编辑:程序博客网 时间:2024/06/06 20:20
http://blog.csdn.net/magneto7/article/details/24584213
函数定义方式:
1.function fun1(){alert("fun1");} //函数就是一个非常特殊的对象,是一个Function的实例,其实在内存中存储的操作是通过一个键值对来存储的。
2.由于函数是一个对象,所以可以通过如下方式定义
var fun2 = fun1; //通过函数拷贝给fun2完成赋值,但fun1、fun2这两个引用并没有指向同一个对象(虽然他们指向的对象的内容是一样的)。
fun1 = function(){alert("fun111");}
//函数虽然是一个对象,但是却和对象有一些区别,对象是通过引用的指向来完成对象的赋值的,
而函数却是通过对象的拷贝来完成的。所以fun1即使变了,也不会影响fun2。
fun2(); //fun1
fun1(); //fun111
//对于对象而言,是通过引用的指向来完成赋值的,此时修改o1或者o2会导致另一方的指向随之改变。
var o1 = new Object();
var o2 = o1; //o1、o2指向同一块空间
o2.name = "octopus";
alert(o1.name); //octopus
//
--------------------------------------------------------------------------------------
1). function sum(num1,num2){return num1+num2;} //相当于:var sum = function(num1,num2){return num1+num2;}
2). function sum(num1){return num1;} //相当于:var sum = function(num1){return num1}
alert(sum(1)); //1
alert(sum(1,1));//1,不是2
/*此时sum所指向的空间已经从有两个参数的函数变化到只有num1的函数中,
在调用的时候就只会调用只有num1的函数,
特别指出:函数的参数和调用没有关系,如果函数只有一个参数,但是却传入了两个参数,仅仅只会匹配一个
所以在js中函数不存在重载。*/
3.var fn = new Function{"num1","num2","alert('fun:'+(num1+num2));"};
//等价于:function fn(num1,num2){alert(num1+num2);}
//函数是对象,不存在重载,只存在覆盖,后面的定义会覆盖前面的定义。
//由于函数是对象,所以可以直接把函数通过参数传递进来;也可以把函数作为返回值。
function calFun(fun,arg){
//第一个参数就是函数对象
return fun(arg);
}
function sum(num){
return num+100;
}
function say(str){
alert("hello "+str);
}
//调用了say函数
callFun(say,"js"); //hello js
//调用了sum函数
alert(callFun(sum,100)); //200
function fun1(arg){
var rel = function(num){
return arg+num;
}
return rel;
} //返回的是一个函数对象
//f是一个函数对象,可以完成调用
var f = fun1(20);
alert(f); //function(num){return arg+name;}
alert(f(30)); //50
var arr = [1,2,33,12,198];
arr.sort();
alert(arr); //1,12,198,33 对于js而言,默认是按照字符串进行排序的。
//如果我们希望通过数字大小来排序,可以通过如下方式:
function sortByNum(a,b){
return parseInt(a)-parseInt(b);
}
arr.sort();
alert(arr); //1,2,12,33,198
//根据对象来排序
function Person(name,age){
this.name=name;
this.age=age;
}
var p1 = new Person("John",23);
var p2 = new Person("Lemo",39);
var p3 = new Person("Ada",41);
var ps = [p1,p2,p3];
//ps.sort(sortByAge);
//ps.sort(sortByProperty("age"));
function sortByName(obj1,obj2){
return obj1.name>obj2.name?1:(obj1.name==obj2.name?0:-1);
} //按名字排序
function sortByAge(obj1,obj2){
return obj1.age-obj2.age;
} //按年龄排序
//通过上述方法来处理排序,带来的问题是需要为每一个属性创建一个函数,显然不灵活
//但是如果通过函数的返回值调用就不一样了。
function sortByProperty(propertyName){
var sortFun = function(obj1,obj2){
return obj1[propertyName]>obj2[propertyName]?1:(obj1[propertyName]==obj2[propertyName]?0:-1);
}
return sortFun;
}
- 深入函数
- 深入函数
- 深入函数
- 深入函数
- 5.函数&深入函数
- js 函数深入解析
- 深入理解JavaScript函数
- 深入探究内联函数
- 深入分析虚析构函数
- 深入“函数指针”
- 深入解JavaScript函数
- strtok()函数深入分析
- strtok()函数深入分析
- 深入理解sizeof()函数
- Cpp深入:函数重载
- 深入理解指针函数
- 深入理解指针函数
- sizeof()函数深入理解
- Unix/Dos 文本文件格式
- poj 3069 Saruman's Army
- 求幂,全排列基本算法
- linux多线程pthread
- 数学之美系列二十:自然语言处理的教父 马库斯
- 深入函数
- Bash快捷键和终端使用vi快捷键方法
- MySQL在大型网站的应用架构演变
- 不打无准备之仗
- android 基础 1.1 button
- 百度地图报错 error102
- hdu 1233 还是畅通工程
- Hibernate4+Spring4+Struts2在老版本基础上升级遇到的问题
- Nature:精神分裂症背后的基因突变