javascript指南-函数

1.函数定义
//函数声明语句
//"被提前"到外部脚本或外部函数作用域的顶部,所以以这种方式声明的函数,可以被在它定义之前出现的代码所调用。
function haha(){
	alert('haha');
}
//函数表达式
//使用前必须先把它赋值给一个变量
var haha=function(){
	alert('haha');
}
嵌套函数,嵌套的函数可以访问嵌套它们(或多重嵌套)的函数的参数和变量。
function haha(a,b){
	function ha(x){return x*x};
	//ha函数可以访问到父级函数的参数
	return ha(a)+ha(b);
}
2.函数的实参与形参
(1)可选形参
当调用函数的时候传入的参数比函数声明时指定形参个数要少,剩下的形参都将设置为undefined值。
haha(1);
function haha(a,b){
	alert(a);//1
	alert(b);//undefined
}
(2)可变长的实参列表:实参对象
在函数体内标识符arguments是指向实参对象的引用,实参对象是一个类数组对象。
haha(1,2);
function haha(a,b){
	alert(arguments[0]);//1
	alert(arguments[1]);//2
}
(3)将对象属性用作实参
当一个函数有多个形参时,要记住实参的调用顺序就比较麻烦了,可以通过传入一个对象来实现。
var o={x:1,y:2};
haha(o);
function haha(o){
	alert(o.x);//1
	alert(o.y);//2
}
3.作为命名空间的函数
在一个命名空间定义的变量不会影响到全局命名空间。
//匿名的函数表达式
(function(){
	//模块代码
}());
/*定义一个扩展函数,用以将第二个以及后续参数复制至第一个参数
这里需要处理一个IE的bug,如果某个对象o中的属性有与对象中同名的不可枚举属性的话,
用for/in循环不会枚举对象o的可枚举属性,比如不会处理toString等属性。
除非我们显式检测它。
*/
var extend=(function(){	//将这个函数的返回值赋值给extend
	//在修复之前,首先检查是否存在bug
	for(var p in {toString:null}){
		//如果能执行进来,说明没有bug,不需要特殊处理
		return function extend(o){
			for(var i=1;i<arguments.length;i++){
				var source=arguments[i];
				for(var prop in source){
					o[prop]=source[prop];
				}
			}
		};
	}
	//如果执行到这里,说明有bug
	return function patched_extend(o){
		for(var i=1;i<arguments.length;i++){
				var source=arguments[i];
				//复制所有可枚举的属性
				for(var prop in source){
					o[prop]=source[prop];
				}
				//检查特殊属性	
				for(var j=0;j<protoprops.length;j++){
					prop=protoprops[j];
					if(source.hasOwnProperty(prop)){
						o[prop]=source[prop];
					}
				}
			}
	};
	//这个列表列出了需要检查的特殊属性
	var protoprops=['toString','valueOf','contructor','hasOwnProperty','isPrototypeOf','properyIsEnumerable','toLocalString'];
}());





























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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值