什么是函数?函数就是完成某个功能或需要重复执行的代码块,只在被调用时才会执行,函数代码可避免在页面载入时就被自动执行。
JavaScript以事件驱动方式响应用户的操作,当用户对页面操作时则会引发相应事件并调用函数对用户作出响应。
JavaScript将函数分为三类
- 独立函数
- 匿名函数
- 内嵌函数
独立函数
1.函数的定义。
function 函数名( [参数变量1, 参数变量2, …] )
{
脚本代码语句块……;
[ return 返回值表达式 ]
}
独立函数一般在部分或在.js外部文件中单独定义。
函数必须用function关键字定义,函数名必须符合标识符的构成规则,参数变量是属于该函数内部的局部变量,负责接收调用函数时传递的数据,也规定了调用函数所必须提供的数据。
注意:在函数中可直接使用JavaScript内置对象,如用document.getElementById(“id”)获取指定的标记对象。
2.函数的返回值
带表达式的return语句,可以将表达式的值作为调用函数产生的结果数据返回给调用者,省略表达式的return语句仅表示立即停止函数代码的执行,结束函数调用。
注意:对于有默认操作的标记在调用事件函数时,可使用 return false;终止元素的默认操作。例如单击submit提交按钮时的默认操作是向服务器提交表单数据,当调用submit事件函数时如果函数没有返回值或返回true; 则继续执行默认操作向服务器提交表单,如果函数返回false则终止不向服务器提交表单。
若a标记单击事件函数false则会终止超链接指定页面。
3.函数的调用
独立函数可以被其他函数任意调用,也可被页面中任何元素任何事件任意多次的调用,调用时只需使用函数名并按定义的参数变量传递数据即可。如果被调函数有返回值,则可函数调用看作是一个数据,即可用变量保存,也可在表达式中直接使用。
调用函数的格式: 函数名( [表达式1, 表达式2, …] );
如果被调函数有返回值,则可以将函数调用看作是一个数据,即可用变量保存,也可在表达式中直接使用。
例如:
var 变量=函数名( [表达式1, 表达式2, …] );
var 变量=a+b*函数名( [表达式1, 表达式2, …] );
在页面中通过某个标记的事件属性调用函数的格式:
<标记名 事件属性名 = “函数名( [表达式1, 表达式2, …] )” />
若事件函数返回false将终止该标记元素的默认操作。
4.函数的内置arguments数组
JavaScript的函数在每次被调用时都会自动生成一个名字为arguments的局部数组,以接收调用者传递过来的所有数据,因此定义函数时即使不指定参数变量,调用时也可以传递任意多个数据,通过arguments数组元素即可逐一获取使用这些数据。
function test(){
var i;
for(i=0; i<arguments.length; i++) { document.write(arguments[i]+"<br />"); }
//或:for (i in arguments) { document.write(arguments[i]+"<br />"); }
……}
内嵌函数
JavaScript的函数可以嵌套定义,即在一个函数内部还可以定义独立的内嵌函数(内部函数),但内嵌函数只能在包含它的独立函数内部调用。
内嵌函数可以直接使用其外部函数的所有变量,而不需要作为参数传递,因此函数内需要多次重复使用的代码块尤其适合定义为内嵌函数,在任意位置任意多次调用而不必传递参数。
function a(){
var i=0;
function b(){
alert(++i);
}
return b;
}
匿名函数 和 箭头函数(ES6标准新增)
JavaScript允许在需要调用函数的位置直接定义并调用匿名函数,一般仅适用于为屏蔽全局变量、在页面加载时需要记忆的事件函数。
匿名函数定义及调用格式:事件属性名称 = function( [参数] ) { 脚本代码语句块; }
箭头函数定义及调用格式:事件属性名称 = ( [参数] )=> { 脚本代码语句块; }
回调函数(JavaScript的高级操作中使用频繁,特别是在异步操作中)
回调函数:如果某个函数作为一个参数传到另一个主函数里面,当那一个主函数执行完之后,再执行传进去的作为参数的函数。在这个过程中,该参数化的函数就叫做回调函数。换句话说,也就是被作为参数传递到另一个函数(主函数)里面的那个函数就叫做回调函数。
<script type="text/javascript">
function test(value){ //这是回调函数!!!!
alert(value);
}
function main(func, value){ //这是主函数!!!!
alert("我是主函数");
func(value);
}
main(test,"我是回调函数");
</script>