七、JavaScript函数(function)

2016-05-28  本文已影响131人  XZ阳光小熊

函数就是包裹在大括号中的代码块,前面使用了关键词 function:

一、函数的声明

函数的声明

我们声明一个求数字立方的函数,函数在定义之后,并不会执行里面的内容,只有在函数进行调用的时候,才会执行。

    // 定义一个求一个数字的立方的函数,并调用
    function cube(a) {
        return a * a * a;
    }
    var res = cube(3);

1、函数表达式

函数表达式,即用变量保存匿名函数。上面的式子就是一个函数表达式,其中从function后面一直到反大括号包裹的内容称为函数体,cube被称之为函数名,a就是函数的参数,return后面的内容称之为返回值。我们只要调用上面的函数就可以求出任何一个数的立方。

二、函数的参数和返回值

1、函数的参数。

观察上面的函数表达式我们会发现函数名括号内有一个a,这个a就是称之为函数的参数。参数类型分为两种:一种叫显示参数也叫形参,是我们在定义的时候写的参数,如上面的a即为形参;另一种叫隐藏参数也叫实参,是函数在调用的时候用的值,如上面函数调用时函数名后面括号内的3即为实参。
函数的参数一般写在函数名后面的小括号内,如果不写参数默认是undefined,函数的参数可以是一个,也可以是多个,当我们不知道到底有多少个参数的时候可以使用arguments 关键字,它表示函数中所有参数组成的数组。

2、函数的返回值(return)。

另外我们查看上面的函数表达使会发现有一个return关键字后面跟着a ×a × a,这就是函数的返回值。我们将参数a传入函数内,再返回三个a的乘积,函数调用时我们就可以通过参数返回我们想要的结果。所以有时,我们会希望函数将值返回调用它的地方。通过使用 return 语句就可以实现。在使用 return 语句时,return 语句后的代码都不会被执行,并返回指定的值。函数调用将被返回值取代,当然也不是所有的函数都需要返回值,我们可以根据需求选择是否添加返回值。

    function fun(a) {
        console.log(a);
    }
    fun('我是一个没有返回值的函数')

    // 函数有多个参数
    function func5(a, b) {
        var res = a + b;
        return res;
    }
    var res3 = func5(12, 34);
    console.log(res3);

    // 函数内部使用 arguments 关键字
    function func6() {
        // 求出所有参数的和,并返回
        var res = 0;
        for (var i = 0; i < arguments.length; i++) {
            res += arguments[i];
        }
        return res;
    }
    console.log(func6(1, 2, 3, 4, 5, 6));
代码执行效果

三、函数的调用

1、函数的调用方式

声明函数后如果没有调用,函数表达式里面的代码是不会执行的函数的调用有两种方法:一种是直接编写函数名后面紧跟小括号,如上面我们求立方的函数我们只用这么写cube(3),即可调用求出3的立方;第二种是直接调用也叫自调用函数,其语法就是写两个小括号,我们把函数写在第一个小括号内,函数运行时它会直接运行函数里面的代码。

    (function () {
        console.log('我是一个自调用函数');
    })();


    (function test() {
        console.log('我是另外一个自调用函数');
    })();

    // 自调用函数特点:函数自己执行,不需要进行调用


    // 自调用函数,如果有参数会怎么样?
    (function (a, b) {
        console.log(a, b);
    })(12, 35);
代码执行效果

2、匿名函数

上面的函数就是一个自调用函数,我们会发现上面的函数没有函数名,像这种函数就被称之为匿名函数,我们当然也可以给他加上函数名,但是这并没有什么卵用。注意给它的参数不是写在function后面的小括号内,而是写在函数体后面的小括号中。

3、函数的调用顺序

我们在声明变量的时候会在变量前面加一个var关键字,我们在声明函数的时候也可以声明一个变量来接收函数表达式。我们都知道变量在声明之前调用会报错显示undefined,如果函数在声明之前调用会不会报错呢,我们可以看以下代码:

    fun(10)
    function fun(a) {
        console.log(a);
    }

    add(2,4);
    var add = function (a, b) {
        return console.log(a+b);
    }

代码执行效果
    fun(10)
    function fun(a) {
        console.log(a);
    }


    var add = function (a, b) {
        return console.log(a+b);
    }
    add(2,4);

Paste_Image.png

从上面的代码我们可以看出,当我们用变量接收函数表达式的时候只能在函数声明后调用;当我们不用变量接收函数表达式的时候,即使是在函数声明之前我们也可以调用,一定要注意二者之间的区别。

四、函数的封装和闭包

JavaScript允许在函数内部嵌套函数---即函数定义和函数表达 式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包,闭包主要就是防止变量污染,下面这段代码就是一个简单的闭包。

    var add = (function(){
        var count = 0;
        return function () {
            count ++;
            console.log(count);
        }
    })()
    add();

函数封装就是将一段实现同一个效果的代码放在一个函数表达式内,这样方便多次调用也可以防止变量污染,比如我们想要取一定范围内的随机数,就可以封装一个函数,代码如下:

     //封装涵数获取随机数
    function random (min, max) {
        return parseInt(Math.random() * (max - min + 1) + min);
    }


    // 封装函数求出圆的面积
    function circleArea(r) {
        return Math.PI * r * r;
    }
    console.log(circleArea(10));

五、浏览器嗅探

可以获取浏览器内核、浏览器、操作系统版本等信息。


以上内容纯属个人理解,由于水平有限,若有错漏之处敬请指出斧正,小弟不胜感激。

上一篇下一篇

猜你喜欢

热点阅读