发表于: 2020-02-18 22:59:15

1 1099


今天完成的事情:今天学习了js的函数相关的知识,如函数的定义
明天计划的事情:继续学习js
遇到的问题: 内容太多太杂需要多联系才能记得牢固一些
收获:今天学习了函数的定义内容

JavaScript 使用关键字 function 定义函数。

函数可以通过声明定义,也可以是一个表达式。

函数表达式

JavaScript 函数可以通过一个表达式定义。

函数表达式可以存储在变量中:如

<p>函数可以存储在变量中:</p>
<p id="demo"></p>
<script>
    var x = function (ab) { return a * b };
    document.getElementById("demo").innerHTML = x;
</script>

运行结果


在函数表达式存储在变量后,变量也可作为一个函数使用:如

<p>函数存储在变量后,变量可作为函数使用:</p>
<p id="demo"></p>
<script>
    var x = function (ab) { return a * b };
    document.getElementById("demo").innerHTML = x(43);
</script>

运行结果

可看出结果可以做为函数使用了

Function() 构造函数

在以上实例中,我们了解到函数通过关键字 function 定义。

函数同样可以通过内置的 JavaScript 函数构造器(Function())定义。比如

<p>JavaScrip 内置构造函数。</p>
<p id="demo"></p>
<script>
    var myFunction = new Function("a""b""return a * b");
    document.getElementById("demo").innerHTML = myFunction(43);
</script>

运行结果、

函数提升(Hoisting)

提升(Hoisting)是 JavaScript 默认将当前作用域提升到前面去的的行为。

提升(Hoisting)应用在变量的声明与函数的声明。

因此,函数可以在声明之前调用:

自调用函数

函数表达式可以 "自调用"。

自调用表达式会自动调用。

如果表达式后面紧跟 () ,则会自动调用。

不能自调用声明的函数。

通过添加括号,来说明它是一个函数表达式:比如

<p>函数可以自动调用:</p>
<p id="demo"></p>
<script>
    (function () {
        document.getElementById("demo").innerHTML = "Hello! 我是自己调用的";
    })();
</script>

运行结果

这是一个匿名自我调用函数

函数可作为一个值使用。比如

<p>函数可作为一个值:</p>
<p>x = myFunction(4,3) 或 x = 12</p>
<p>两种情况下,x 的值都为 12。</p>
<p id="demo"></p>
<script>
    function myFunction(ab) {
        return a * b;
    }
    var x = myFunction(43);
    document.getElementById("demo").innerHTML = x;
</script>

运行结果

也可作为表达式来使用,例如

<p>函数可作为一个表达式使用。</p>
<p id="demo"></p>
<script>
    function myFunction(ab) {
        return a * b;
    }
    var x = myFunction(43) * 2;
    document.getElementById("demo").innerHTML = x;
</script>

运行结果

函数是对象

在 JavaScript 中使用 typeof 操作符判断函数类型将返回 "function" 。

但是JavaScript 函数描述为一个对象更加准确。

JavaScript 函数有 属性 和 方法。

arguments.length 属性返回函数调用过程接收到的参数个数:如

<p> arguments.length 属性返回函数接收到参数的个数:</p>
<p id="demo"></p>
<script>
    function myFunction(ab) {
        return arguments.length;
    }
    document.getElementById("demo").innerHTML = myFunction(43);
</script>

运行结果

toString() 方法将函数作为一个字符串返回:

<p> toString() 将函数作为一个字符串返回:</p>
<p id="demo"></p>
<script>
    function myFunction(ab) {
        return a * b;
    }
    document.getElementById("demo").innerHTML = myFunction.toString();
</script>

运行结果

JavaScript 函数参数

JavaScript 函数对参数的值没有进行任何的检查。

参数规则

JavaScript 函数定义显式参数时没有指定数据类型。

JavaScript 函数对隐式参数没有进行类型检测。

JavaScript 函数对隐式参数的个数没有进行检测。

默认参数

ES5 中如果函数在调用时未提供隐式参数,参数会默认设置为: undefined

有时这是可以接受的,但是建议最好为参数设置一个默认值:如

<p>设置参数的默认值。</p>
<p id="demo"></p>
<script>
    function myFunction(xy) {
        if (y === undefined) {
            y = 0;
        }
        return x * y;
    }
    document.getElementById("demo").innerHTML = myFunction(4);
</script>

运行结果

ES6 函数可以自带参数

ES6 支持函数带有默认参数,就判断 undefined 和 || 的操作:如

<p>设置参数的默认值。</p>
<p id="demo1"></p>
<p id="demo2"></p>
<script>
    function myFunction(xy = 10) {
        // 如果不传入参数 y ,则其默认值为 10
        return x + y;
    }
    // 输出 2
    document.getElementById("demo1").innerHTML = myFunction(02);
    // 输出 15, y 参数的默认值
    document.getElementById("demo2").innerHTML = myFunction(5);
</script>

运行结果

arguments 对象

JavaScript 函数有个内置的对象 arguments 对象。

argument 对象包含了函数调用的参数数组。

通过这种方式你可以很方便的找到最大的一个参数的值:如

<p>查找最大的数。</p>
<p id="demo"></p>
<script>
    x = findMax(11235001154488);

    function findMax() {
        var imax = arguments[0];

        if (arguments.length < 2return max;

        for (i = 0i < arguments.lengthi++) {
            if (arguments[i] > max) {
                max = arguments[i];
            }
        }
        return max;
    }
    document.getElementById("demo").innerHTML = x;
</script>

运行结果

或者创建一个函数用来统计所有数值的和:

<p>计算所有参数之和:</p>
<p id="demo"></p>
<script>
    function sumAll() {
        var isum = 0;
        for (i = 0i < arguments.lengthi++) {
            sum += arguments[i];
        }
        return sum;
    }
    document.getElementById("demo").innerHTML =
        sumAll(11235001154488);
</script>


运行结果

通过值传递参数

在函数中调用的参数是函数的隐式参数。

JavaScript 隐式参数通过值来传递:函数仅仅只是获取值。

如果函数修改参数的值,不会修改显式参数的初始值(在函数外定义)。

隐式参数的改变在函数外是不可见的。

通过对象传递参数

在JavaScript中,可以引用对象的值。

因此我们在函数内部修改对象的属性就会修改其初始的值。

修改对象属性可作用于函数外部(全局变量)。

修改对象属性在函数外是可见的。

传参还是没弄清楚,明天在详细了解一下


返回列表 返回列表
评论

    分享到