函数是由事件驱动的活着当它被调用时执行的可重复使用的代码块。
在JavaScript中使用函数时,必须先定义这个函数,然后才能对这个函数进行调用。下面先介绍函数的定义方式:
function 函数名(参数列表)
{
代码块
}
利用function来定义一个函数
-
**函数名:**调用函数时通过函数名进行调用。 对于函数的命名,一般应该使用能够描述函数功能的单词进行描述,往往也可以使用多个单词组合进行命名,这样能够提高脚本的可读性。
-
**参数列表:**参数列表是可选的,在必要的时候;可以使用参数列表向函数传递一些参数,以便在函数中可以使用这些参数。
-
**代码块:**代码块中的代码包含在一对大括号中,通过代码块的执行完成函数的功能,如果需要返回一个值给调用函数的语句,应该在代码块中使用return语句。
- **调用带参数的函数:**在调用函数时,可以向其传递值,这些值被称为参数。
这些参数可以在函数中使用。可以发送任意多的参数,由逗号 (,) 分隔:
myFunction(argument1,argument2)
当您声明函数时,请把参数作为变量来声明:
function myFunction(var1,var2)
{
这里是要执行的代码
}
变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。
- 在使用 return 语句时,函数会停止执行,并返回指定的值。
function myFunction()
{
var x=5;
return x;
}
上面的函数会返回值 5。
注释:整个 JavaScript 并不会停止执行,仅仅是函数。JavaScript 将继续执行代码,从调用函数的地方。
-
局部 JavaScript 变量 在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是局部的)。 可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量。 只要函数运行完毕,本地变量就会被删除。
-
全局 JavaScript 变量 在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
-
JavaScript 变量的生存期 JavaScript 变量的生命期从它们被声明的时间开始。 局部变量会在函数运行以后被删除。 全局变量会在页面关闭后被删除。
如果把值赋给尚未声明的变量,该变量将被自动作为全局变量声明。这条语句:carname="Volvo";
将声明一个全局变量 carname,即使它在函数内执行。
函数在定义好之后,不能自动执行,需要进行调用 调用方式:
1. 在<script>
标签内调用
例:
<script>
function demo(){
var a=10;
var b=20;
var sum=a+b;
alert(sum);
}
demo();//调用函数
</script>
2. 在HTML文件中调用
例:
<form>
<input type=“button” value=“按钮” onclick=“demo()”>
</form>
或<button onclick=“demo()”>按钮</button>
解释: 一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 闭包的特点:
- 作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
- 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
**原因:**javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。 当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
例:
function closure(){
var str = "I'm a part variable.";
return function(){
alert(str);
}
}
var fObj = closure();
fObj();
在上面代码中,str是定义在函数closure中局部变量,若str在closure函数调用完成以后不能再被访问,则在函数执行完成后str将被释放。
但是由于函数closure返回了一个内部函数,且这个返回的函数引用了str变量,导致了str可能会在closure函数执行完成以后还会被引用,所以str所占用的资源不会被回收。这样closure就形成了一个闭包。