Skip to content

Latest commit

 

History

History
133 lines (96 loc) · 4.65 KB

12_function.md

File metadata and controls

133 lines (96 loc) · 4.65 KB

JavaScript函数和创建函数

了解函数的用途

函数是由事件驱动的活着当它被调用时执行的可重复使用的代码块。

JavaScript 函数定义

在JavaScript中使用函数时,必须先定义这个函数,然后才能对这个函数进行调用。下面先介绍函数的定义方式:

function 函数名(参数列表)
{
    代码块
}
利用function来定义一个函数
  • **函数名:**调用函数时通过函数名进行调用。 对于函数的命名,一般应该使用能够描述函数功能的单词进行描述,往往也可以使用多个单词组合进行命名,这样能够提高脚本的可读性。

  • **参数列表:**参数列表是可选的,在必要的时候;可以使用参数列表向函数传递一些参数,以便在函数中可以使用这些参数。

  • **代码块:**代码块中的代码包含在一对大括号中,通过代码块的执行完成函数的功能,如果需要返回一个值给调用函数的语句,应该在代码块中使用return语句。

JavaScript 函数参数

  • **调用带参数的函数:**在调用函数时,可以向其传递值,这些值被称为参数。 这些参数可以在函数中使用。可以发送任意多的参数,由逗号 (,) 分隔: 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,即使它在函数内执行。

JavaScript 函数调用

函数在定义好之后,不能自动执行,需要进行调用 调用方式:

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 闭包

解释: 一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 闭包的特点:

  1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
  2. 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。

**原因:**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就形成了一个闭包。