定义函数
1.命名函数:function f(){//函数体}
2.匿名函数:var a=function(){//函数体}
命名函数被称作声明式函数;匿名函数被称作引用试函数。
也可以把函数看作一个对象来声明例:使用Function对象构造函数
var function_name=new Function(arg1,arg2,···,argN,function_body)
//arg:是函数参数;function是函数主体要只执行的代码
匿名函数通常适用于只使用一次的函数场景,对于不经常使用的函数匿名函数比较方便。
调用函数
调用函数可以通过小括号来实现。在括号内包含多个参数,参数之间通过都好进行分隔
例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
function f(){
alert('Hello Word!')
}
f()
</script>
</body>
</html>
函数参数
函数参数有两种
1.形参:在函数定义时,传递给函数的参数,被称为形参
2.实参:函数被调用时,传递给函数的参数,被称为实参
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
function f(a,b){ //a,b形参
var c=a+b
document.write(c)
}
f(10,25) //10,25实参
</script>
</body>
</html>
JavaScript不限制实参与形参的个数。但是一般来说形参与实参的个数都是相等的。
1.当实参个数比形参个数多时:这是多余的实参将被忽略
2.当形参个数比实参个数多时:假设有2个形参,调用函数时输入一个实参。这时JavaScript会把第二个实参默认为undefined。若是进行相加将会但会NaN。
防止用户随意传递参数
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
function f(a, b) {
if (f.length != arguments.length) {
throw new Error("实参与形参个数不一致,请重新调用函数!")
} else {
return a + b
}
}
try {
alert(f(10))
} catch (e) {
alert(e.message)
}
</script>
</body>
</html>
函数应用
实际开发中函数通常作为一个表达式来进行处理,用户可以把函数值赋给变量或者作为一个参数传递给另一个函数。
1.只是用一次的匿名函数
var a=function(x,y){
return (x+y)
}(23,24) //返回47
2.函数作为值
将函数作为值赋给其他变量
var a=function(x,y){
return (x+y)
}
alert(a(12,23)) //返回35
3.函数作为参数
增强函数的应用能力
var a=function(x,y){
return (x+y)
}
var b=function(f,x,y){
return f(x,y)
}
alert(a(b,3,5) //返回7
4.函数作为表达式
(function(x){alert(x)})(50)
闭包函数
闭包函数的外部函数被调用后,他的变量不会消失,仍然被内部函数所使用,而且所有内部函数都拥有对外部函数的访问权限
function a(){
var n=0
function b(m){
n=n+m
return n
}
return b
}
var c=a()
document.write(c(3))
document.write(c(3))
document.write(c(3))
document.write(c(3))
当全局作用域反复调用内部函数时,将会不断把参数值递加给外层函数的私有变量n上,形成闭包对外部函数的私有变量做长时的保护作用。可以用来封装对象的私有属性和私有方法。