针对IE bug做的补丁
var extend=(function(){
//处理IE bug 即如果o的属性拥有一个不可枚举的同名属性,那么for/in循环不会枚举对象o可枚举的属性
return function extend(o){
for (var i=0;i<arguments.length;i++){
var source=arguments[i];
for(var prop in source)o[prop]=source[prop];
}
return o;
};
}
return function patched_extend(o){
for (var i=0;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];
}
}
return o;
};
var protoprops=["toString","valueOf","constructor","hasOwnProperty","isPrototypeOf","propertIsEnumerable","toLocalString"];//需要检查的特殊属性
}());
var _=0;
自定义函数的属性
JS中函数不是原始值 而是一个特殊对象,也就是说函数可以拥有属性
function factorial(n){
if(isFinite(n)&&n>0&&n==Math.round(n)){
if(!(n in factorial))
factorial[n]=n*factorial(n-1);
return factorial[n];
}
factorial[1]=1;
};
函数声明 function XXX(/*参数*/) { /* 函数体*/}; 函数定义表达式 var XXXX = function(/*参数*/){/*函数体*/};
var a=[function(x){return x*x;},20]; //函数直接量
a[0](a[1]); //=>400