JavaScript函数
JavaScript函数是一个对象。
函数定义
JavaScript代码复用单位是函数,函数可以包含一段可执行代码,也可以接收调用者传入的参数。JavaScript定义函数主要有以下三种方式:
命名函数
<script text="text/javascript"> function 函数名(参数列表){ 要执行的函数体 } </script>
匿名函数
<script text="text/javascript"> function (参数列表){ 要执行的函数体 } </script>
示例:
<script text="text/javascript"> /*注意F大写,是一个对象*/ var f=function (name){ alert("匿名函数\n你好:"+name); } f("Vinsmoke"); </script>
使用function类来构造匿名函数(函数执行体有多条,所以此方式一般少用)
<script text="text/javascript"> /*注意F大写,是一个对象*/ new Function(参数列表, 函数执行体); </script>
经验之谈:大多数优秀的JavaScript框架都是用匿名函数语法来定义函数,它的可读性好。
函数使用示例:
<script language="javascript">
show("Li", 21); //命名函数调用可以放在声明之前
function show(name, age){
alert("名字:"+name+", 年龄:"+age);
}
var f=function (name, age){
alert("名字:"+name+", 年龄:"+age);
}
f("Lin", 22); //匿名函数调用不能放在函数声明之前,此时调用尚未声明
/*里面有双引号是,外面使用单引号*/
var e=new Function("name", "age", 'alert("名字:"+name+", 年龄:"+age);');
//e("Li", 5);
window.e("Li", 5); //成为window对象的一个属性
</script>
函数返回值
JavaScript中的函数没有声明返回类型,当函数想要返回值的时候直接加上return “值”语句即可,假如不加就代表次函数没有任何返回值。
局部变量和局部函数
局部变量:与Java相同(局部变量可以被全局变量覆盖)。
局部函数是在函数中定义的,外部函数可以直接调用其内部的函数,局部函数可以访问全局函数的变量,而全局函数不能访问局部函数的变量。
示例:
<script language="javascript">
function f1(){
var n=1;
function f2(){
alert(n);
}
return f2;
}
var f=f1();
f();
/*
f1函数已经执行完毕,f2仍然可以访问n,即局部变量并没有消失,就是闭包的概念
闭包:有权访问另一个函数作用域中变量的函数
*/
</script>
函数调用
JavaScript提供了三种函数调用方式:
直接调用:此是最常见、最普通的调用方式
对象.函数引用
当声明一个函数没有指明分配给哪个对象使用的时候,默认分配给window对象。
以call方法调用函数
函数引用.call(调用者, 参数1,参数2……)
以apply方法调用函数
函数引用.call(调用者, arguments)
arguments相当于数组,用来存放多个参数,和call方法类似。
示例:
<script language="javascript">
function show(name, age){
alert("你好:"+name+", 年龄:"+age);
}
//window.show("张三", 25);
//show.call(window, "张三", 25);
show.apply(window, ["张三", 25]);
function display(arr, func){
func.call(window, arr);
}
display([1,2,3,4], function(arr){
for(i in arr)
document.write(arr[i]+"<br />");
})
</script>