js学习(16)----函数声明和函数作为参数

本文深入探讨JavaScript中的函数声明与表达式、声明提升、函数作为参数及返回函数等核心概念,通过实例帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.函数声明和函数表达式

函数声明需要被调用才会执行相应的内容,而函数表达式则相当于调用了函数。
如下:

// 这是函数声明,没有看到;号
function sum(num1, num2) {
    // 函数体
}
// 这是函数表达式
var result = function(num1, num2) {
    // 函数体
}

2.声明提升(function declaration hoisting)

函数声明和函数表达式涉及到到函数声明提升的问题。
即在js中,函数声明会被提到顶部,解析器会率先读取函数声明,并使得其在执行任何代码之前可以执行;而表达式则必须等到解析器执行到它所在的代码行时,才会真正地被解释执行。
注:对于函数表达式中的函数定义是不会提前的。
注:对于变量,变量也会声明提前,但是变量的初始化则在代码所在的位置执行,不会提前。

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <p id="result">Show</p>
        <script type="text/javascript">
            alert(sum(4, 2));
            function sum(num1, num2) {
                return num1 + num2;
            }
            function sum(num1, num2) {
                return (num1 + num2) * 2;
            }
        </script>
    </body>
</html>

上面的代码可以正常的运行并且输出结果是12;
原因是:声明提前,但是因为第二个函数定义的名称与参数与第一个相同,所以覆盖了第一个,声明提前后,当执行到语句alert(sum(4, 2))时,就会得到相应的结果,所以是12。

3.函数作为参数

一个函数可以想传递参数一样传递给另一个函数。
举个例子:

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <p id="result">Show</p>
        <script type="text/javascript">
            function addOne(num) {
                return num + 1;
            }
            function callSomeFunction(someFunction, someArgument) {
                return someFunction(someArgument);
            }
            var result = callSomeFunction(addOne, 1);
            alert(result);
        </script>
    </body>
</html>

4.返回一个函数

一个函数可以作为另外一个函数的结果返回。
举个例子:
注:数组的sort方法可以传入一个函数作为参数,因为如果是按照默认的排序方式的话,10小于2(因为1的ASCII码比2小),但是这不符合我们的要求,所以常常会传入一个比较函数。

<script type="text/javascript">
            function createCompareFunction(propertyName) {
                return function(object1, object2) {
                    var value1 = object1[propertyName];
                    var value2 = object2[propertyName];
                    if (value1 > value2) {
                        return 1;
                    } else if (value1 < value2) {
                        return -1;
                    } else {
                        return 0;
                    }
                }
            }
            var data = [{name:"Ann", age:20}, {name:"Tome", age:22}];
            data.sort(createCompareFunction("name"));
        </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值