高级js教程3——Function类型

在javascript的世界里,函数也是对象,函数名是指向对象的指针。一般有如下三种方法来声明一个函数:

第一种

function someFunction() {
    alert("hello");
}    //能够被代码解析器扫描到

第二种

var someFunction = function() {
    alert("hello");
};    //不会被代码解析器扫描到

第三种

var someFunction = new Function("alert(\"hello\");");    //不推荐

这三种方式声明函数的效果基本上一样,第一种和第二种的区别在于,第一种代码解析器会在代码执行之前扫描函数时被扫描到,而第二种不会,第三种与第二种的方式一样,但是执行效率会比较低,因为会导致两次解析代码,第一次是普通的js代码,第二次是传到Function构造函数的字符串。

第一种和第二种的区别可以用以下例子说明:

alert(sum(10,10));    //可以正常执行
function sun(num1,num2) {
    return num1 + num2;
}

alert(sum(10,10));    //不可以正常执行
var sum = function(num1,num2) {
    return num1 + num2;
};


既然函数作为一个对象,就可以当做一个参数传递给另外一个函数,同时也可以当做另外一个函数的返回值。

/**
 * callSomeFunction的作用是接收传递过来的函数名以及该函数所接收的参数
 * 调用该函数,并返回该函数执行完成之后的返回值
 * @param someFunction 某个函数的名字
 * @param someArgument 摸个函数接收的参数列表
 * @returns
 */
function callSomeFunction(someFunction , someArgument) {
	return someFunction(someArgument);
}

function add10(num) {
	return num + 10;
}

alert(callSomeFunction(add10,20));	//30

function getGreeting(name) {
	return "hello " + name;
}

alert(callSomeFunction(getGreeting ,"Sean"));        //hello Sean

上述代码显示了函数如何作为一个参数,下面的代码显示了函数如何被当做返回值的,

/**
 * 该函数的作用是接收一个数组作为排序比较的属性作为参数
 * 然后返回通过某种方法比较大小的函数
 * @param comparedPropertyName 排序的依据
 * @returns {Function}
 */
function createComparisonFunction(sortPropertyName) {
	return function(object1,object2) {
		var value1 = object1[sortPropertyName];
		var value2 = object2[sortPropertyName];
		if(value1 > value2) {
			return 1;
		} eles if(value1 < value2) {
			return -1;
		} else {
			return 0;
		}
	};
}

var data = [{name : "abc",age : 28},{name : "def",age : 27}];

data.sort(createComparisonFunction("name"));
alert(data[0].name);	//abc

data.sort(createComparisonFunction("age"));
alert(data[0].name);	//def

在上面代码中,定义了一个data数组,现在需要对data排序,数组对象提供了sort方法来方便排序。使用sort方法需要提供一个方法来让sort知道如何去比较两个元素的大小,以此来决定如何排序。data数组的每个元素有两个属性,name和age,都可以作为比较大小的对象,以不同的属性作为比较大小的依据得到的结果是不一样的。所以就定义了一个名为createComparisonFunction的方法,该方法接收需要被作为比较依据属性的名字,返回比较的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值