javascript系列1:函数
函数分为:声明式函数,匿名函数,表达式函数
声明式函数如:
function testFn(){
}
函数传参:
函数传参有两种类型的参数:原始类型和对象类型
原始类型不改变调用函数的变量值,即为传值
对象类型会改变调用函数的变量值,即传引用
例:
1 window.onload = function(){ 2 testParams(); 3 } 4 function alertArgs(strObject,arrObject){ 5 strObject = "Override"; 6 arrObject[1] = "2"; 7 arrObject[arrObject.length] = "three"; 8 } 9 function testParams(){ 10 var str = "abc cba"; 11 var arr = new Array("one","two"); 12 console.info(str); 13 console.info(arr); 14 console.info("***********"); 15 alertArgs(str,arr); 16 console.info(str); 17 console.info(arr); 18 }
运行结果:
声明式函数需要特别注意的地方:
1 if(condition){ 2 function say(){ 3 alert("a"); 4 } 5 }else{ 6 function say(){ 7 alert("b"); 8 } 9 }
大多数浏览器会返回第二个函数,即调用的时候弹出"b",而firefox则会在condition为true时返回"a"。
匿名函数如:
new Function("param1","param2",...,"return param1*param2");
函数最后一个参数为函数体,前边的参数为函数的参数
这种的函数为动态函数。与声明式函数不同的是,它会动态创建一个新函数,当这个函数执行完后就会被立即删除。如果该函数在一个for循环中执行,则执行一次循环就会创建一次函数,而声明式函数只会创建一次。
如:var Fn = new Function("x","y","return x*y");相当于:
function Fn(x,y){
return x*y;
}
函数表达式如:
var fn = function(){
}
声明一个匿名函数,赋值给变量fn
用法几乎同声明式函数用法。
但使用时须注意:
如果表达式函数在调用之后定义,则会报错"undefined"。而声明式函数不会出现这种情况。
如果在if判断语句的不同条件中出现两个同名的声明式函数,则只有Firefox会当条件为true时执行if里的函数,其它浏览器不管条件如何,都是后一个函数。而表达式函数则不会出现这种情况,表达式函数按照正常的条件语句执行的顺序执行。