【JS】JavaScript函数

参数

当函数被调用的时候,会得到一个免费配送的参数,那就是arguments数组。函数可以通过此参数来访问所有函数被调用时传递的参数列表,包括那些没有被分配给函数声明时定义的形式参数的多余参数。这使得编写一个无须指定参数个数的函数成为可能:

//构造一个将大量值相加的函数
//这个函数内部定义的变量sum不会与外部定义的sum产生冲突
//该函数只会看到内部的那个变量

var sum = function(){
	var i, sum;
	for(i = 0; i < arguments.length; i++){
		sum += arguments;
	}
	return sum;
}
documents.writeln(sum(4, 8, 15, 16, 23, 42))

这并不是一个特别有用的模式。

因为一个语言的设计错误, argruments并不是一个真正的数组。它只是一个"类似数组(array-like)"的对象。arguments拥有一个length属性,但是它并没有任何数组的方法。这将会导致一个错误,后面会说到。

返回Return

当一个函数被调用时,它从第一个语句开始执行,并在遇到关闭函数体的 } 时结束。然后函数把控制权交还给调用该函数的程序。

return语句可以用来将函数提前返回,当return被执行时,余下的语句就不会被执行而立即返回。

函数总会返回一个值,如果没有指定返回值,则会返回undefined。

如果函数前面加了 new 前缀,且返回值不是一个对象,则返回 this (该新对象)。

异常Exceptions

JavaScript提供一套异常处理机制,异常是干扰程序的正常执行流程的不寻常的事故。当发生这样的事故时,程序应该抛出一个异常:

var add = function (a, b){
	if(typeof a !== 'number' || typeof b !== 'number'){
		throw{
			name: 'TypeError',
			message: 'add needs numbers'
		};
	}
	return a + b;
}

throw语句会中断函数的执行。它应该抛出一个exception 对象,该对象包含一个用来识别异常类型的name属性和以恶描述的message 属性。你也可以添加其他属性。

该exception 对象将被传递到 一个try 语句和一个 catch从句:

// 构造一个try_it函数,以不正确的形式调用之前的 add 函数。
var try_it = function(){
	try{
		add("seven")
	}catch(e){
		document.writeln(e.name + ":" + e.message);
	}
}
try_it()

一个 try 语句只会有一个捕获所有异常的 catch 代码块。 如果你的处理手段取决于异常的类型,那么异常处理器必须检查异常对象的name属性来确定异常的类型。

扩充类型的功能

JavaScript允许给语言的基本类型 扩充功能。

举例说明,我们可以给 Function.prototype 增加方法来使得该方法对所有函数可用:

Function.prototype.method = function(name, func){
	this.prototype[name] = func;
	return;
}

通过给Function.prototype增加一个method方法,我们下次给对象增加方法的时候就不必键入 prototype 这几个字符,省掉一些麻烦。

JavaScript没有专门的整数类型,但是有时候确实只需要提取数字中的整数部分。JavaScript本身提供的取整方法有些丑陋。我们可以通过给 Number.prototype 增加一个interger来改善他。他会根据数字的正负来判断是使用 Math.ceiling 还是math.floor.

Number.method('integer', function(){
	return Math[this < 0 ? 'ceil' : 'floor']
});
document.writeln((-10 / 3).integer()); // -3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值