JS 脚本语言第四课,函数的初步认识

大家好,欢迎大家来到 JS 脚本语言的第四课。从今天这一课开始,我们将给大家讲一讲函数及其调用方法。


如前面的课程所述,当你学过初中数学,你就会接触到第一种函数,比如一次函数。在数学里,函数就像一个固定的公式,你扔进去一个 x,它就能吐出一个对应的 y。但在数学中,x 只有取值范围,没有“作用域”的概念,也就是说,不管 x 怎么变,公式都能直接用它。


但在编程中,函数更像是一台“自动售货机”。你往里面投币(传入参数),机器内部进行加工(函数体执行),最后掉出一瓶饮料(返回值)。而且,这台售货机有自己的“独立工作车间”(作用域),车间里的东西不能随便拿到外面,外面的东西也不能随便拿进车间。这就是编程函数和数学函数在概念上最大的区别。不过它们的本质是一样的:都是接收输入,给出输出。


在编程里,这台“售货机”非常高级,它不仅能接收数字,还能接收文字、数组、甚至另一台“售货机”(也就是函数)。说到把函数传进去,我得啰嗦几句:传进去的函数叫“回调函数”,它就像是给主函数定了一个闹钟或者指令,告诉主函数“你在某个时候,记得执行一下我”。


我们重点花两节课的时间给大家讲一讲函数的传参以及返回。有了这两节课的内容,大家就可以写出一个小程序了。今天这节课,我们主要讲函数的传参和调用。


什么是传参?什么是调用?什么是返回值?我们用一个超级接地气的例子来解释:

你的妈妈让你从她那里拿10块钱去买酱油。

她给你的10块钱,就是“参数”。

你拿着钱出门去买酱油的这个动作,就是“调用”。

你最终买回来交给她的酱油,就是“返回值”。


大家细品一下:你的妈妈给你钱(传参),同时隐含了一个指令“买完必须回来”(返回值约定)。在代码里,当你调用一个函数时,你不仅要告诉它“你需要处理什么数据”,还要明确“你处理完应该给我一个什么结果”。这个结果,就是返回值。


在 JS 里,定义一个函数有很多种写法。我们先看最传统的一种,叫“函数声明”。这就好比你在工商局“注册”了一台售货机。它的样子大概是这样的:


function buySoySauce(money) {

// 这里是函数体,也就是“去买酱油”的具体过程

let soySauce = "酱油";

return soySauce;

}


你看,money 就是机器上的“进料口”(参数),return soySauce 就是把酱油从“出料口”递给你,有你递给你的妈妈。


那怎么让这台机器运转起来呢?也就是怎么“调用”?很简单:


let result = buySoySauce(10);

console.log(result); // 输出:酱油


这里的 10 就是你投进去的硬币(传进去的参数),result 就是你拿个盆在出料口接到的东西(接收到的返回值)。


好,那有同学可能就要问了:如果我不投币,或者我想投多个币,怎么办?

没问题。JS 里的机器很灵活,可以一个进料口都没有,也可以有很多个进料口,用逗号隔开就行。比如我们造一台加法机器:


function add(a, b) {

return a + b;

}


let sum = add(3, 5);

console.log(sum); // 输出:8


假如你只投了一个币,比如 add(3),那么 b 这个进料口就空着了。机器不知道空着代表啥,就给它贴个标签叫 undefined(未定义),最后算出来的结果就是个乱码 NaN(Not a Number,不是数字)。这就要说到一个很重要的概念:参数的数量匹配。JS 不强制你投够币,少了就补 undefined,多了就把多出来的扔掉。


但也有的时候,你希望就算不投币,机器也能用默认的材料干活,那我们可以这样写:


function greet(name = "朋友") {

console.log("你好," + name);

}


greet(); // 输出:你好,朋友

greet("张三"); // 输出:你好,张三


这个叫“默认参数”,相当于机器出厂时自带了默认原料,非常好用。


接下来我们讲讲调用。刚才我们直接写了函数名加括号,这叫普通调用。但在 JS 里,函数还有一个特别的身份:它本身也是一种“物品”。你完全可以把它打包存到变量里,然后再通过变量来调用。比如:


let fn = function(a, b) {

return a - b;

};


let result = fn(10, 4);

console.log(result); // 输出:6


这种写法叫做“函数表达式”。它和前面的函数声明看起来差不多,但有个细微的区别:函数声明可以在定义之前调用(因为系统会提前注册),函数表达式不行(必须等代码执行到那一行,盒子才算造好)。这个我们以后再细讲。现在大家只要记住,函数可以当作普通物品传来传去。


也正是因为这样,我们才能把一个函数作为参数传给另一个函数。传进去的函数,就是我们开头说的“回调函数”。


举个例子,你写了一个“做饭”的函数,它需要一个“买食材”的动作作为参数:


function cook(buyIngredients) {

let food = buyIngredients("白菜");

console.log("做好了" + food);

}


function buyIngredients(item) {

return "清洗过的" + item;

}


cook(buyIngredients);


这里的 buyIngredients 就是回调函数。cook 函数不关心你怎么买菜,它只需要你在它需要的时候,把菜给它就行。这就是回调的意义:控制主函数在某个时机,去执行你传进去的那个动作,并获取你需要的值。


好,今天这节我们主要就讲了传参、调用和返回值。大家记住三个重点:

第一,参数是你给函数的东西,返回值是函数给你的结果;

第二,函数可以没有参数,也可以有多个参数,还可以有默认参数;

第三,函数本身也能作为参数传进去,这种函数叫回调函数。


下一节课我们继续深入讲返回值的各种花式玩法,比如返回一个函数,以及闭包的初步认识。


今天课后大家可以自己写一个函数,模拟“你妈给你10块钱,你买酱油找零2块”的过程。参数是钱,返回值是酱油和找零。提示一下,用“对象”打包返回就行,就像你拿一个塑料袋,把酱油和2块钱零钱装在一起递给妈妈。


好了,这节课就到这里,我们下节课见。

发表于:2026-08-31 06:26
0个回复
  • 消灭零回复
您还没有登录,登录后才可回复。 登录 注册