什么是函数
程序中专门保存一段可重用的代码片段的程序结构,再起一个名字。
函数(function)就是一组允许在你的代码里随时调用的语句。每个函数实际上是一个短小的脚本。
为什么要用函数
重用
函数对任何语言来说都是一个核心的概念。通过函数可以封装任意多条语句,而且可以在任何地方,任何时候调用执行。
如果你需要多次使用同一段代码的时候,可以把他们封装成一个函数。
什么时候用
只要一段代码可能被反复使用,都要先将这段代码保存在函数中。然后再反复使用函数
例子: 身信息登记
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
//定义函数
//function 函数名(形参列表){
function say(name,id){
//函数体; //封装的代码
//alert参数,只有一个,显示警告框的信息;无返回值。
alert("姓名"+name+",身份证号"+id)
}
//调用函数
//这个函数可以通过其函数名来调用,后面还要加上一对圆括号和参数(圆括号中的参数如果有多个,可以用逗号隔开)
say("李雷",013);
</script>
</body>
</html>
细分讲解
创建函数:
function 函数名(形参变量){
函数体;
封装的代码
}
调用函数:
函数名(实参变量);
形参变量:
(1). 什么是: 专门接收函数执行时必需的数据的变量(虽然没有var)
(2). 为什么: 有些函数执行时,必须传入必要的数据,才能正常执行!
(3). 何时: 今后,只要一个函数执行时,必须外界传入某些数据才能正常执行时,都要定义形参变量
实参变量:
(1)什么是:是在调用时传递给函数的参数,即传递给被调用函数的值。实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量
(2)为什么:有些函数执行时,必须传入必要的数据,才能正常执行!
(3)何时:有若干变量执行同一个函数时,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。
实参和形参的区别:
参数有形参(parameter)和实参(argument)的区别,形参相当于函数中定义的变量,实参是在运行时的函数调用时传入的参数。
形参就是函数声明时的变量,实参是我们调用该函数时传入的具体参数。
例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
function a(s,d){
var num=s * d;
alert(num);
}
a(1,2);
//声明函数a时,s,d就是形参。调用函数a(1,2) 1,2就是实参。
</script>
</body>
</html>
创建函数
一。声明函数
function 函数名(形参){ }
最基础的创建方法,缺点:会被声明提前,打乱程序正常的执行顺序。
什么是声明提前:
在程序开始执行前, 程序会先将var声明的变量和function声明的函数,提前到当前作用域的顶部集中创建, 赋值留在原地.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
//代码是由上到下,从左到右的执行顺序,但是由于js的声明提前这些就边的混乱了
alert(a); // 按照执行顺序这里应该是报错,但这里确实输出了function a(){ }
alert(b); // 这里输出undefined,说明有但是在这一行前面明明没有变量 b
function a(){ }
var b = function c() {};//声明变量时,为变量赋值:
alert(a);
alert(b);
</script>
</body>
</html>
二。 用赋值方式创建(函数表达式,又叫函数字面量):
var 函数名变量=function(形参变量列表){ 函数体; return 返回值 }
函数不会被声明提前,保证了程序的正常执行顺序。
例子:
var fun=function(){ console.log(1) };
fun();
三。用new 创建:
var 函数名=new Function(“形参1”,“形参2”,…,“函数体; return 返回值”)
var a = new Function('alert("你好");');
总结
function 函数名(){ … } //被声明提前
↓
相当于var 函数名=function(){ … }
↓
相当于var 函数名=new Function(…)
结论: function 底层等效于 new Function()
function的本质是创建一个函数对象
变量的作用域
变量的可访问范围
全局作用域:在函数外,使用var声明的变量是全局变量,在任何作用域下都可以访问它。
函数作用域:在函数以内,使用var声明的变量是局部变量,只能在当前的作用域下可以访问。
在函数中,不加var声明的变量是全局变量。