函数概念
函数是定义一次但却可以调用或执行任意多次的一段 JS 代码。函数有时会有参数,即函数被调用时指定了值的局部变量。 函数常常使用这些参数来计算一个返回值, 这个值也成为函数调用表达式的值。
函数对任何语言来说都是一个核心的概念。 通过函数可以封装任意多条语句, 而且可以在任何地方、任何时候调用执行
函数定义(声明)
function 函数名(){
函数体
}
JavaScript 使用关键字 function 定义函数。
函数可以通过声明定义,也可以是一个表达式。
函数名的命名规范和变量名命名规范一样
函数声明后不会立即执行,会在我们需要的时候调用到。
实例:
function myFunction(a, b) {
return a * b;
}
函数调用
- 函数名();
注意:函数调用放在定义的前后均可以
- 函数的调用顺序与定义顺序:
要遵循执行顺序结构
showName();
function showName(){
document.write('');
}
函数表达式
JavaScript 函数可以通过一个表达式定义。
函数表达式可以存储在变量中:
实例:
var x = function (a, b) {return a * b};
在函数表达式存储在变量后,变量也可作为一个函数使用:
实例:
var x = function (a, b) {return a * b};
var z = x(4, 3);
以上函数实际上是一个 匿名函数 (函数没有名称)。
函数存储在变量中,不需要函数名称,通常通过变量名来调用。
上述函数以分号结尾,因为它是一个执行语句.
Function() 构造函数
函数可以通过内置的 JavaScript 函数构造器(Function())定义。
实例:
var myFunction = function (a, b) {return a * b}
var x = myFunction(4, 3);
注意:在 JavaScript 中,很多时候,你需要避免使用 new 关键字。
函数提升
提升(Hoisting)是 JavaScript 默认将当前作用域提升到前面去的的行为。
提升(Hoisting)应用在变量的声明与函数的声明。
因此,函数可以在声明之前调用:
myFunction(5);
function myFunction(y) {
return y * y;
}
使用表达式定义函数时无法提升.
函数参数
写在函数名后的()里的内容即参数.
参数可以有多个,参数之间用“,”隔开、
定义时的参数称为 形参
调用时的参数称为 实参
不限制:不限参数个数,不限参数类型
function 自定义函数名(形参1,形参2......){
函数体
}
注意:一般情况下,形参与实参的数量应保持一致
参数规则
JavaScript 函数定义显式参数时没有指定数据类型。
JavaScript 函数对隐式参数没有进行类型检测。
JavaScript 函数对隐式参数的个数没有进行检测。
函数对象
- 属性:
argument:参数 能接受到的所有参数
length:长度 接收到的是参数的个数 - 在JavaScript中,可以引用对象的值。
因此我们在函数内部修改对象的属性就会修改其初始的值。
修改对象属性可作用于函数外部(全局变量)。
修改对象属性在函数外是可见的。 - 全局对象
当函数没有被自身的对象调用时 this 的值就会变成全局对象。
在 web 浏览器中全局对象是浏览器窗口(window 对象)。
该实例返回 this 的值是 window 对象:
带返回值的函数
带参和不带参的函数,都没有定义返回值,而是调用后直接执行的。实际上,任何函数
都可以通过 return 语句跟后面的要返回的值来实现返回值。
<script type="text/javascript">
function showName(parameters){
var results=somestaments;
return results;
}
</script>
results:函数中的局部变量
return:函数中返回变量的函数
注意的是:返回值在调用函数时不是必须定义的。
函数的嵌套
所谓函数的嵌套即在函数内部再定义一个函数,注意可以使内容函数获得外部函数的参数以及函数的全局变量。
函数嵌套的语法格式如下:
<script type="text/javascript">
var outter=10;
function functionName(parameters1,parameters2){
function InnerFunction(){
somestatements;
}
}
</script>
functionName:外部函数名称
InnerFunction:内部函数名称
匿名函数
- 匿名函数就是没有名字的函数。
function(){
函数体
}
- 匿名函数:1、自我执行 2、赋值
(function(a,b){
console.log(a+b);
})(2,5); //自我执行
输出结果:
7
- 带有返回值
var res=(function(a,b){
return a*b;
})(3,5);
console.log(res);
- 匿名函数的调用:
(1)通过表达式自我执行
(function(){
alert(“Jack”);
})();
- 把匿名函数赋值给变量
var box=function(){
alert(“Jack”);
}
调用:
box();
求10的阶乘用递归函数:
function getNum(n){
if(n==1){
return 1;
}
return n*getNum(n-1);
}
var num=getNum(10);
console.log(num);
递归函数
- 递归函数就是函数在自身的函数体内调用自身,使用递归函数时,如果处理不当将会使程序进入死循环,递归函数只在特定的情况下使用,如处理阶乘问题等。
下面介绍递归函数的应用。首先使用递归函数取得10!的值,其中10!=109!,而9!=98!,以此类推。使用js解决阶乘问题,可以使用f(n)表示n!的值,当1<n<10时,f(n)=n*f(n-1);当n<=1时,f(n)=1,程序代码如下:
<script type="text/javascript">
function f(num){
if(num<=1){
return 1;
}else {
return f(num-1)*num;
}
}
<script>
alert("10!的结果为: ""+f(10)); //3628800
- 在定义递归函数时需要以下两个必要条件:
(1)包括一个结束递归的条件
例如:在上述代码中的if(num<=1)的语句,如果满足条件则执行return 1语句,不在递归。
(2)包括一个递归调用的语句
例如:在上述代码中的return f(num-1)*num语句,用于实现调用的递归函数。